c#物件導向中的get和set的用法

世紀緣發表於2016-09-26

   物件導向程式設計的一個規則是:使使用者只需要指定物件能做什麼,而不需要去指定或者瞭解物件是如何完成該的。 
屬性是物件內部的資料,使用者如果能夠直接訪問物件內部資料,顯然就違反了上述規則。(這也有點類似Windows系統對記憶體的保護,可以通過API來操作,但不推薦直接訪問記憶體,那樣就可能把記憶體搞亂了。)
 通過get和set訪問器來訪問,就保持了這種規則,而且還提供了額外的功能,如對值進行檢查,實現只讀或只寫屬性等。
 總的來說就是可以通過set get 來對類的屬性進行封裝,物件導向的程式是不可以直接用類自己定義的屬性的

剛剛學C#的時候,很多人都不明白屬性的訪問器有什麼用呢,我上網見了不少的評論,拉下來給大家看看


一般物件導向程式語言都要求成員變數不能直接暴露給外部訪問,如下:
public class A
{
    public int Age;   //這是不好的,待會有程式設計師可能把-1賦給Age
}
為了防止亂賦值,C#設計了一個屬性機制,要求把成員變數設為私有,在通過屬性來控制成員變數的讀寫,如下:
public class B
{
    private int age;  //私有成員變數
    public int Age    //age的屬性
    {
        get{ return age; }  //讀取器
        set{                //寫入器
            if(value>0)
              age = value;   //value是準備寫入的值
        }
    }
}
這樣Age就像保安一樣,擋在age的前面。訪問age的時候需要通過Age許可,如下:
B b = new B();
b.Age = -1;  //這是不行的,-1被帶入value,value<0,判斷不成立
b.Age = 10;  //這是可行的 

如果還有不懂的話可以留言,我儘量教會你,下面是我一個簡單是例子

//-------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    public class Myclass
{
     private string id="";
     private string name="";
    public string ID
   {
            get
            {
              return id;
             }
            set
              {
                id =value;
             }
       }
      public string Name
       {
           get
            {
              return name;

             } 
            set  
              {
                name =value;
              }
        }
   }

    class Program
    {
        static void Main(string[] args)
        {
              Myclass clazz = new Myclass ();
                clazz.ID ="BH001";
                clazz.Name="MR01";
              Console.WriteLine(clazz.ID,clazz.Name);
              Console.ReadLine();
        }
      
    }
   
}

相關文章