C#中get和set


C#中get和set

 

http://blog.sina.com.cn/s/blog_82526aa60100txtx.html

 在程序中經常碰到get、set,不甚明白,在網上查詢時也說的迷迷糊糊,所以整理下,以學的明白透徹點。

    有兩個類person:

    public class person

    {

      public string name;

    }

    public class person

    {

      public string Name{set;get;}

    }

    第一個類型的name屬性未封裝,其name屬性直接通過public關鍵字暴露給系統中的其他類了,而第二個類型的name屬性通過get set關鍵字進行了封裝,get和set分別對應的是可讀和可寫,相當於如下代碼:

    private string name;

    public string Name

    {

      get { return name; }

     set { name = value; }

   }

    簡單說下區別吧:當實例化第一個“person”這個類時,系統在分配內存空間時對name屬性直接分配內存,之后對name屬性的操作也是直接操作內存中name屬性所在的這個塊;而當實例化第二個“人”類型時,系統會先分配一個叫name的private私有的內存空間(此處的name對於類的內部使用,Name對於外部操作使用,要有所區分),之后的讀與寫的操作都是通過Name這個public的類似於指針的東西來關聯name進行,以此達到封裝的目的,並且通過get和set關鍵字也可以控制可讀還是可寫。建議用后者,封裝的好處可以參考相關文檔,不再累述了~

    至於get和set的作用,除了控制讀寫之外還有其他的作用,舉個簡單的例子,比如說當我給Name賦值的時候想要先進行一些邏輯判斷,就可以這樣:

        private string name;

        public string Name

        {

            get { return name; }

            set

            {

             name = String.IsNullOrEmpty(value) ? "空" : value;

            }

        }

 

再舉例說明下:

    假設類是一銀行,既能存錢也能取錢

    Private Money;

    Private class bank()

    {

      get

      {

         return Money;

      }

      Set

      {

         Money=value;

      }

    }

    Money 就像銀行里的自動取款機,你看不見里面的Money,但你能用set(存錢),用get(取錢)。Money是一個私有字段,是分裝在類中的,類以外的程序不能直接訪問的。C#中get、set用法中,類的set和get成員是外部程序訪問類內部屬性的唯一方法,就像你去銀行取錢,你不能直接從銀行的保險櫃里拿錢,而是銀行營業人員把錢取出來給你的。

    屬性在調用者看來就像一個普通的變量,但作為類的設計者,你可以利用屬性來隱藏你類中的一些字段,使外界只能通過屬性來訪問你的字段,你可以通過屬性來限制外界對你的字段的存取,就利用get、set。如果想讓用戶隨意存取你的字段,那么就實現get、set;如果只想讓用戶讀取字段,就只實現get;若只想讓用戶寫字段就只實現set。同時還可以在set和get中對用戶傳遞的值進行一些驗證工作,以確保你的字段將含有正確的值。

    Private int a;

    Public int index

    {

      get

      {

        return a;

      }

      set

      {

         If (value>0)

           a=value;

         else

           a=0;

      }

    }

    可看出,get、set用法中一則是隱藏組件或類內部的真實成員;

    二是用來建立約束的,比如,實現“有我沒你”這種約束;

    三是用來響應屬性變化事件,當屬性變化是做某事,只要寫在set方法里就行。

    當你想讀出或寫入屬性的值時,存取標志限定了被實現的語句。用於讀出屬性的值的存取標志記為關鍵字get,而要修改屬性的值的讀寫符標志記為set。

實事求是,不自以為是


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM