2011-07-20 15 views
1

我很迷惑asp.net中的屬性。 我只是不明白爲什麼我們使用屬性,當我應該使用它們。有沒有人可以對此做一點說明。爲什麼以及何時使用屬性

public class Customer 
{ 
    private int m_id = -1; 

    public int ID 
    { 
     set 
     { 
      m_id = value; 
     } 
    } 

    private string m_name = string.Empty; 

    public string Name 
    { 
     set 
     { 
      m_name = value; 
     } 
    } 

    public void DisplayCustomerData() 
    { 
     Console.WriteLine("ID: {0}, Name: {1}", m_id, m_name); 
    } 
} 
+0

ASP.Net中的Console.WriteLine ... –

回答

1

有幾個很好的理由。首先,您可能需要在您的setter中添加驗證邏輯,或者實際計算getter中的值。

另一個原因是與生成的IL代碼有關。如果您正在處理分佈在多個程序集上的大型項目,那麼您可以更改屬性後面的代碼,而無需使用程序集重新編譯的應用程序。這是因爲屬性的「訪問點」保持不變,同時允許修改其後的實現代碼。我第一次看到這個時,我正在研究自動屬性的問題,因爲我沒有看到這些和普通公共變量之間的關係。

2

屬性提供讀取,並通過財產寫入它來保護在一個類中的字段的機會。在其他語言中,這通常通過執行專門的getter和setter方法的程序來完成。 C#屬性啓用這種類型的保護,同時讓您可以像訪問字段一樣訪問屬性。

屬性相對於字段的另一個好處是您可以隨時間更改其內部實現。使用公共字段時,基礎數據類型必須始終保持相同,因爲調用代碼依賴於相同的字段。但是,對於屬性,您可以更改實現。例如,如果客戶的ID最初以int形式存儲,則可能需要進行更改,以便執行驗證,以確保調用代碼無法將ID設置爲負值。如果它是一個字段,你永遠無法做到這一點,但是一個屬性允許你在不破壞代碼的情況下做出這樣的改變。現在,讓我們看看如何使用屬性。

取自CSharp-Station

1

這很容易。 類中的所有字段必須是私有的(或受保護的)。要向另一個類顯示字段,您可以使用屬性或get/set方法。屬性更短。

P.S.不要聲明只寫屬性。這是最糟糕的做法。

+1

字段「必須」是私人的是不正確的。建立公共領域完全合法(雖然不推薦)。 –

1

屬性是封裝類的數據的一種便捷方式。 從MSDN引用:

屬性是,提供了一個靈活的機制來讀,寫 或計算私有字段的值的構件。屬性可以使用 就好像它們是公共數據成員一樣,但它們實際上是特殊的 稱爲訪問器的方法。這使數據能夠被輕鬆訪問,並且仍然有助於提高方法的安全性和靈活性。

讓我們考慮兩種常見情況:

1)要公開Name屬性沒有使它從類外部改變:

private string m_name = string.Empty; 
    public string Name 
    { 
     get 
     { 
     return m_name; 
     } 
    } 

2)你想進行一些檢查,或者運行一些代碼,每次數據被訪問或設置時間:

private string m_name = string.Empty; 
    public string Name 
    { 
     get 
     { 
     return m_name; 
     } 
     set 
     { 
     m_name = (String.IsNullOrEmpty(value)) ? "DefaultName" : value; 
     } 
    } 

見: http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

1

最重要的原因是驗證目的在setter和操縱部分可以實現get part。 例如 如果我們採用普通變量並將其聲明爲公共,任何人都可以指定任何值,但應該從1-7開始存儲平日。 但是在屬性設置器中,您可以控制和驗證。

下一個你可以使用它進行跟蹤。這意味着,您可以知道客戶已經調用了多少次設置和獲取函數(統計目的,可能不常用)。

最後,您可以根據需要控制只讀,只寫和讀/寫屬性。

相關問題