類中的屬性

 屬性的作用:

先看一個簡單的作用

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

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