2010-02-19 84 views
42

我看到了一些util屬性的例子,例如 (作爲動態工廠的地圖) http://msdn.microsoft.com/en-us/magazine/cc164170.aspx什麼時候應該在C#中使用屬性?

只是想知道使用屬性的優點是什麼? 我可以在http://msdn.microsoft.com/en-gb/z0w1kczw(VS.80).aspx 找到參考,但是我不確定何時以及爲什麼要嘗試使用它。

+4

不管你最終決定做,讓你的屬性沒有行爲純粹的數據。如果您需要根據屬性實現行爲,請將行爲置於另一個類中,以便您可以獨立地更改這兩個行爲。 – 2010-02-19 09:30:06

回答

29

在.NET Framework中,屬性可用於很多原因 - 就像

  • 定義哪些類 序列化

  • 選擇哪些方法在 Web服務

  • 曝光

Attributes允許我們將descriptions添加到類,屬性和方法,然後可以在運行時通過反射來檢查。

考慮這個例子:

假設你有一個具有不同於舊版本的方法,它仍然是在使用以任何理由,現在你已經拿出類的新版本,這使美妙的一類通用列表和LINQ的使用,並有類似用途的新方法。您希望開發人員更喜歡在庫的更高版本中提供的新版本。你會怎麼做?一種方法是在文檔中寫入。更好的方法是使用屬性如下。

public class AccountsManager 
{ 
    [Obsolete("prefer GetAccountsList", true)] 
    static Account[] GetAccounts() { }  
    static List<Account> GetAccountsList() { }  
} 

如果程序編譯時使用了obsolete方法,開發商獲取此信息,並相應決定。

AccountManager.GetAccounts()已經過時: 喜歡GetAccountsList

我們也可以創建並添加Custom Attributes按要求。

參考:


希望這有助於

+3

屬性是附加到.NET中的類,接口,函數,屬性等的元數據。元數據提供了關於**項目的附加信息**,併爲該項目的用戶提供了可能性。屬性存儲在類型上而不是實例上。 – AxelEckenberger 2010-02-19 09:25:35

+0

謝謝你的回答和參考。 也許我不是那麼擅長c#來找到我希望使用自定義屬性的情況。我將屬性視爲已編譯的描述。因爲它需要慢速反射才能使用,這讓我覺得它並沒有那麼有用。 – ccppjava 2010-02-19 09:33:58

+0

我已經用例子更新了答案。 – 2010-02-19 10:38:46

0

.NET框架預定義和用途屬性類型來控制應用程序的運行時行爲。

考慮[webmethod]屬性,在運行時框架解析此屬性並確定此方法將暴露在Web服務中。

同樣,您可以編寫自定義屬性來控制應用程序在運行時的行爲。屬性可以定位類,方法,屬性,委託,枚舉,事件,字段...

要在運行時解析該屬性,必須使用反射。

查看MSDN鏈接瞭解更多詳情。

4

考慮一個屬性作爲它所屬方法或屬性的元數據。它講述了更多關於成員的內容。

5

當您想要將元數據附加到您的類或類成員以及應用常見行爲而無需爲共享該行爲的每個單元實現特定接口時,這些屬性是適當的。後者是aspect-oriented programming的一個例子。

相關問題