淺談c#裏面的屬性

**屬性結合了字段和方法的多個方面。 對於對象的用戶,屬性顯示爲字段,訪問該屬性需要相同的語法。 對於類的實現者,屬性是一個或兩個代碼塊,表示一個 get 訪問器和/或一個 set 訪問器。 當讀取屬性時,執行 get 訪問器的代碼塊;當向屬性分配一個新值時,執行 set 訪問器的代碼塊。 不具有 set 訪問器的屬性被視爲只讀屬性。 不具有 get 訪問器的屬性被視爲只寫屬性。 同時具有這兩個訪問器的屬性是讀寫屬性。
與字段不同,屬性不作爲變量來分類。 因此,不能將屬性作爲 ref參數或 out參數傳遞。
屬性具有多種用法:它們可在允許更改前驗證數據;它們可透明地公開某個類上的數據,該類的數據實際上是從其他源(例如數據庫)檢索到的;當數據被更改時,它們可採取行動,例如引發事件或更改其他字段的值。
屬性在類塊中是按以下方式來聲明的:指定字段的訪問級別,接下來指定屬性的類型和名稱,然後跟上聲明 get 訪問器和/或 set 訪問器的代碼塊。 例如:**

public class Date
        {
            private int month = 7;  // Backing store

            public int Month
            {
                get
                {
                    return month;
                }
                set
                {
                    if ((value > 0) && (value < 13))
                    {
                        month = value;
                    }
                }
            }
        }

在此示例中,Month 是作爲屬性聲明的,這樣 set 訪問器可確保 Month 值設置爲 1 和 12 之間。 Month 屬性使用私有字段來跟蹤該實際值。 屬性的數據的真實位置經常稱爲屬性的“後備存儲”。屬性使用作爲後備存儲的私有字段是很常見的。 將字段標記爲私有可確保該字段只能通過調用屬性來更改。 有關公共和私有訪問限制的更多信息,請參見訪問修飾符。

get 訪問器

get 訪問器體與方法體相似。 它必須返回屬性類型的值。 執行 get 訪問器相當於讀取字段的值。 例如,當正在從 get 訪問器返回私有變量並且啓用了優化時,對 get 訪問器方法的調用由編譯器進行內聯,因此不存在方法調用的系統開銷。 然而,由於在編譯時編譯器不知道在運行時實際調用哪個方法,因此無法內聯虛擬 get 訪問器。 以下是返回私有字段 name 的值的 get 訪問器:

   class Person
        {
            private string name;  // the name field
            public string Name    // the Name property
            {
                get
                {
                    return name;
                }
            }
        }

當引用屬性時,除非該屬性爲賦值目標,否則將調用 get 訪問器以讀取該屬性的值。 例如:

   Person person = new Person();
                //...

                System.Console.Write(person.Name);  // the get accessor is invoked here

set 訪問器

set 訪問器類似於返回類型爲 void 的方法。 它使用稱爲 value 的隱式參數,此參數的類型是屬性的類型。 在下面的示例中,將 set 訪問器添加到 Name 屬性:

 class Person
        {
            private string name;  // the name field
            public string Name    // the Name property
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
        }

當對屬性賦值時,用提供新值的參數調用 set 訪問器。 例如:

   Person person = new Person();
                person.Name = "Joe";  // the set accessor is invoked here                

                System.Console.Write(person.Name);  // the get accessor is invoked here
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章