C# 類屬性封裝、字段的詳解


   今日敲代碼時,突然感覺對類的屬性封裝、字段有點犯迷糊了。。連基礎的都不知道了,那敲的代碼怎么能嚴謹高效的。果斷拿起各種高級編程、大全啥的翻起來~~這不再把自己的理解寫下來(定義都是直接抄書的),獻給同樣迷糊的小伙伴。

    先說下類的成員,它分為數據成員和函數成員。數據成員,簡單點可以理解成類的數據,包含了字段、常量(const)、事件;函數成員,就是操作類中的數據,包含方法、屬性、構造函數、終結器(析構函數)、運算符、索引器。(就提一下,方便后面說下去,要都解釋就偏題了)字段就是類里定義的變量,而屬性則是字段的拓展。所以在使用屬性前要結合一個正常的字段聲明,這個字段稱為屬性的后備字段(backing field):

 1 private int numberOfCows; 
 2 public int NumberOfCows
 3 {
 4        get
 5        {
 6               return numberOfCows;
 7        }
 8        set
 9        {
10               numberOfCows = value;
11               BagOfFeed = numberOfCows * FeedMultiplier;
12        }
13 }

讀取NumberOfCows字段時會運行get方法,返回私有字段numberOfCows。而設置NumberOfCows字段時,會調用set方法,看上去這個方法沒有參數,其實value就是它的參數,其中包含為這個字段設置的值。其實這就是用屬性來對字段進行封裝(這就是封裝啦)。

使用封裝還可以實現對屬性的只讀、只寫:

1 public string Name { get; private set; }//只讀
2 public string Name { private get; set; }//只寫

這樣寫屬性時,編譯器會自動創建private string name。這種是會自動實現后備成員變量的自動實現屬性。

如果是:

1 public string Name { get; set; }

這樣的沒有啥限定的屬性,其實和公有字段沒多大區別了。

但是從面向對象的角度來講,公開的是方法,而不是字段哦。而且微軟也推薦:所有的字段都設置為私有字段,如果要使用它們,則把它們封裝成屬性。對於這樣簡單的set或get,編譯器會自動進行inline處理,沒有函數進出棧的性能損失。所以還是建議不要用公有字段了,給字段穿件衣服吧~~


免責聲明!

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



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