类中的属性

 属性的作用:

先看一个简单的作用

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 ; }//错

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章