类中的属性

来源:互联网 发布:lego moc 搭建软件 编辑:程序博客网 时间:2024/06/08 15:39

 属性的作用:

先看一个简单的作用

private string studentAge;public string StudentAge{  get   {            return studentAge;        }   set  {          if(studentAge>16)&&(studentAge<20)//判断是否是程序的要求             studentAge=value;         else         Console.WriteLine("不是指定的年龄范围!");         }}


 

 

属性是面向对象中的一个重要概念,首先还是先观察一下属性的写法特点:

 

属性由两大部分组成:私有字段、公有属性

属性部分包括 get 、set 两个特殊的方法,在这个两个方法中,get是返回对应私有变量的值,我们称为“获取属性值”,set是给对应的私有变量赋值,我们称为“给属性赋值”,并且这个值自动保存在value中,然后通过value个私有变量赋值的。通过调试程序的赋值和取值我们可以观察get和set的调用时机,

请大家观察下图,首先给getset打上断点:

观察程序执行:

 

属性是外部调用字段的一个入口。

因为字段一般都是私有,私有字段外界是无法访问的,外界想访问私有字段,我们可以把这个字段封装一个属性

 

public 的字段与属性的区别

先看下面这个程序

Class student{  public int Age;}static void Main (string[] args){  student Student=new student();  Student.Age= -20;  string strStudent =Stuent.Age;  Console.WriteLine("This student age is:{0}",strStudent);}想想这样的结果会是什么呢?This student age is:-20   是不是这个学生在倒起活呢?所以属性对字段就有封装保护作用。

 

 

private string studentAge;public string StudentAge {get{return studentAge;}set    {    if(studentAge>16)&&(studentAge<20)//判断是否是程序的要求     studentAge=value;    else    Console.WriteLine("不是指定的年龄范围!");  }}


通过上面的示例,大家可以看出,显示这样的程序设计很不安全,这就是直接公开私有字段无法解决的问题。但是使用属性就能解决,因为属性给我们提供的get和set方法是可以在里面添加业务逻辑的,如下:

 

 

private string studentAge;public string StudentAge {     get         {          return studentAge;        }    set       {          if(studentAge>16)                                  //添加的业务逻辑           studentAge=value;                                  //添加的业务逻辑         else                                               //添加的业务逻辑          Console.WriteLine("不是指定的年龄范围!");              //添加的业务逻辑        }}


 

属性可以是“只读的”

先看下面这段会报错代码:

Class Student{  private ing age ;  public int Age     {       get{return age;}    }}static void Main(string[] args){  Student stu=new Student();  stu.Age=20;}


可以有人会问会报什么样的错误呢?

无法对属性或索引器" ****.Student.Age "赋值--它是只读的

 那么属性设为只读的有什么好处呢?

例如:

         我们要根据人的生日来计算出他的年龄。

Class Student{   private DateTime birthday;   public DateTime Birthday    {      get{return birthday;}      set{birthday =value;}    }   public int Age    {      get       {         return DateTime.Now.Year-birthday.Year;       }    }}static void Main(string[] args){Student stu=new Student();stu.Birthday=Convert .ToDataTime("1988-2-3");Console.WriteLine( "my old {0}",stu.Age);}


属性的简要写法:

在 .Net 3.0出现以后,属性可以使用简写的方式。

public int age {get ; set ;}public string Name { get ; set ;}


简要写法还不支持只读或只写:

public int age  { get ; }//错

原创粉丝点击