首页 > 编程语言 > 详细

unity第二周:抽象属性的理解

时间:2020-07-18 16:24:59      阅读:55      评论:0      收藏:0      [点我收藏+]

提问:既然上一篇文章说到属性可以看成是特殊的一种方法,那么可否有抽象属性(前面加abstract)呢?

既然方法可以有抽象的,那么属性也可以有,不过如果你要写成抽象属性 可能上一篇文章的两种写法就不能都用了。

public abstract  class  student//抽象类里的方法都是抽象的

{

public  abstract  int  Age{get;  set;}

public  abstract   string  Name

{

get{return  name;}//你会发现这种写法会报错

set{nama=value;}//这里同样报错,两个报错地方的波浪线都在get,set上

}

}

出现上述问题的原因是什么呢?

对于抽象类来说,如果有类继承自他,那么他的子类就需要对他里面的抽象函数进行完善(即实现),这就意味着,抽象类可以使每一继承自他的类对每一个抽象函数有不同的实现,但是这里你在基类就将函数实现了,就相当于个人事情做多了,下属没有东西做,产生混乱。

为什么第一个就没有报错?

第一种是语法糖,是一种简化,虽然在普通的类中好像两种等价,但其实还是有细微差别,首先将get,set当成函数理解,这样其实函数是没有实现的(没打{}),则基类并未抢下属风头。所以成立。

当基类写好,只需一个子类继承基类,然后实现抽象函数即可。

调用实现:

public  abstract class  Person

{

public  abstract  string Name{get;   set;}

public  abstract  int  Age{get;  set;}

}

public   class  student:Person

{

private  int  age=10;

private  string name="慕楉";

private  string  code="projectone";

public  override  string  Name

{

get{return name; }

set{name=value;}

}

public override  int  Age

{

//get;

//set;

get{return age;}

set{age=value;}

}

public  override  string  Code

{

//get;写成这样是不会像字段传值的,只有直接调用Code函数

//set;

get{return code;}//这样写,不管调用Code函数还是code字段,都返回最终值

set{code=value;}

}

public  override  string Tostring()//这个函数是object类里的,在unity中所有类继承自object类,Tostring是object类的一个虚函数,所以可以直接写

{

return   "Code="+code+"Age="+age+"Name="+Name;//请注意这里的大小写对应的位置,我的大写表示的是函数,这样后面的结果才是正确的,如果你这里写成小写的,那么就是字段,如果student类中的重载函数用的不是标准的函数形式(如果用的语法糖的形式)则最后输出的就是初始值,即不会给小写传值,所以由此可以看出get,set的两种写法还是有一定区别的

}

}

Main函数里面写

student stu=new  student();

stu.Name="约翰";

stu.Age=20;

stu.Code="projecttwo";

console.writeline(stu.Tostring);

unity第二周:抽象属性的理解

原文:https://www.cnblogs.com/Nicela/p/13334908.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!