2009-04-21 80 views
12

我見過很多使用[]的C#程序,例如[STAThread],然後代碼如下所示。另一個典型例子是[DLLImport]方括號內文本的含義

我知道STAThread意味着什麼,但我的問題是方括號的意義是什麼,基本上它們告訴編譯器是什麼?

回答

16

這是一個屬性。屬性是一種元數據形式,可以附加到各種代碼元素:類,方法,程序集等。

某些屬性對C#編譯器有特殊含義,例如[Serializable]可能會告訴編譯器發出一些代碼序列化類的一個實例(我說'可能',因爲我不知道C#編譯器的內部工作原理)。

您也可以創建自己的屬性(通過繼承System.Attribute)。使用反射,您可以在運行時從屬性中提取信息。

一個簡單的例子是創建一個屬性來指定在顯示對象屬性時在HTML表單中使用什麼樣的輸入字段。

一些鏈接:

2

這些是attributes

屬性有很多用途 - [Obsolete]將方法標記爲過時,並且編譯器會警告您。其他人如[DebuggerNonUserCode]對編譯器沒有任何意義,並且讓調試器知道標記方法中的代碼是自動生成的。

您還可以創建自己的屬性並使用它們來標記任何類型的元數據。例如,您的客戶對象可能有一個屬性[MarketingInformation("Customer is rich! Milk him good!")].

1

它們的屬性,即添加到任何他們正在裝修的元數據。

1

這些被稱爲代碼屬性。屬性用於標記具有通常用於指定執行期間的行爲的屬性的代碼。它們通常用於標記方法,屬性和參數。在執行代碼的過程中,將執行一個名爲「反射」的操作來檢查代碼。反思告訴編譯器遵守並遵守由您指定的任何指令,作爲編碼器對代碼標記屬性。

一個很好的例子是[Serializable]屬性。當在類上面標記時,該屬性向編譯器表明它可以被序列化,以用於持久化類實例或通過諸如SOAP Web服務之類的介質進行傳輸。

參見以下文章: link text