本主題介紹最常用於在 C# 和 Visual Basic 程序中的屬性。
大多數特性適用於特定的語言元素 (如類或方法;但是,有些屬性是全局它們適用於整個程序集或模塊。 例如, AssemblyVersionAttribute 屬性可用於向程序集中嵌入版本信息,如下例所示:
全局特性在源代碼中出現在任何頂級 using 指令 (在 Visual Basic 中Imports 更高版本以及任何類型、模塊或命名空間聲明之前。 全局特性可顯示在多個源文件,但是,在單一編譯傳遞必須編譯文件。 對於 Visual Basic 項目,全局屬性以 Visual Basic 項目自動創建的 AssemblyInfo.vb 文件通常中。 在 C# 項目中,它們在 AssemblyInfo.cs 文件中。
程序集特性是提供有關程序集的信息的值。 它們分成以下類別:
-
程序集標識特性
-
信息性特性
-
程序集清單特性
-
強名稱特性
程序集標識特性
三個特性 (使用強名稱,如果適用) 確定程序集的標識:名稱、版本和區域性。 ,當在代碼中引用時,這些特性構成程序集的完整名稱需要。 使用特性,可以將程序集的版本和區域性。 但是,名稱值由編譯器,在 “程序集信息”對話框或程序集鏈接器 (al.exe) 的 Visual Studio IDE 設置,創建程序集後,根據包含程序集清單的文件。 AssemblyFlagsAttribute特性指定程序集的多個副本是否可以共存。
下表顯示標識屬性。
特性 |
用途 |
---|---|
詳細描述程序集的標識。 |
|
指定程序集的版本。 |
|
指定程序集支持哪個區域性 |
|
在同一在同一應用程序域指定程序集是否支持在同一臺計算機上並行執行,處理,或者。 |
信息性特性
您可以使用信息性特性爲程序集提供其他的公司或產品信息。 下表顯示在 System.Reflection 命名空間中定義的信息性特性。
特性 |
用途 |
---|---|
定義爲程序集清單指定產品名稱的自定義特性。 |
|
定義爲程序集清單指定商標的自定義特性。 |
|
定義爲程序集清單指定信息性版本的自定義特性。 |
|
定義爲程序集清單指定公司名稱的自定義特性。 |
|
定義爲程序集清單指定版權的自定義特性。 |
|
指示編譯器使用 Win32 文件版本資源的特定版本號。 |
|
指示程序集是否符合公共語言規範 (CLS) (cls)。 |
程序集清單特性
可以使用程序集清單特性提供程序集清單中的信息。 其中包括標題、說明、默認別名和配置。 下表顯示在 System.Reflection 命名空間中定義的程序集清單特性。
特性 |
用途 |
---|---|
定義爲程序集清單指定程序集標題的自定義特性。 |
|
定義爲程序集清單指定程序集說明的自定義特性。 |
|
定義用於指定程序集配置的自定義特性 (例如 retail 或調試) 爲程序集清單。 |
|
程序集清單定義友好默認別名 |
強名稱特性
在 Visual Studio 的早期版本,若要使用強名稱的程序集執行以下程序集級別特性:
這仍支持,但是,給程序集簽名的首選方法是使用 簽名頁 在 " 項目設計器 " 請參見 “項目設計器”->“簽名”頁 和如何:對程序集進行簽名 (Visual Studio) 有關更多信息。
Obsolete 屬性指示某個程序實體標記爲建議不再使用的一個。 每次使用對實體標記爲過時根據隨後將生成警告或錯誤,配置屬性。 例如:
在此示例中應用 Obsolete 特性類A 和給方法 B.OldMethod。 由於特性構造函數的第二個參數被應用於 B.OldMethod 設置爲 true,此方法將導致編譯器錯誤,,而使用A 都將生成警告的類。 調用B.NewMethod,但是,不會導致警告或錯誤。
爲警告或錯誤的一部分,作爲第一個參數提供的字符串給特性構造函數將顯示。 例如,在中,當將它與前面的定義時,以下代碼生成兩個警告和一個錯誤:
類的 A 兩個將生成警告:一個用於聲明類的引用和一個用於類構造函數。
Obsolete 屬性,即可在不使用參數,但是,包括原因已過時,並什麼項的建議。
Obsolete 屬性是一種單用途特性,並且可應用於允許特性的任何實體。 Obsolete是 ObsoleteAttribute的別名。
Conditional 屬性執行方法依賴於預處理標識符。 Conditional屬性是 ConditionalAttribute的別名,可應用於方法或屬性類。
在此示例中, Conditional 應用於方法以啓用或禁用程序特定診斷信息示:
如果 TRACE_ON 未定義標識符,則將不會顯示跟蹤輸出。
Conditional 屬性通常用於在 DEBUG 標識符啓用跟蹤,並記錄的功能的調試版本,但不在發佈版本中,如下所示:
當爲條件標記爲的調用方法時,是否存在指定的預處理符號確定調用是否包括或省略。 如果定義了該符號,則包含調用;否則,調用中被省略。 使用 Conditional 是更加整潔,較細,,並且不太到將方法的容易出錯的除了在#if…#endif 內部塊標明,例如:
一個條件方法必須是類或結構聲明的方法,而且不能有返回值。
使用多個標識符
如果方法具有多個 Conditional 屬性,對方法的調用包括在內,如果至少一個條件符號的定義 (換言之,這些符號在邏輯上鍊接可以使用或運算符)。 在此示例中, A 或 B 顯示導致方法調用:
通過使用和運算符,若要實現邏輯鏈接符號的效果,可以定義序列化的條件方法。 例如,因此,只有當 A 和 B 定義,下面的第二種方法將執行:
使用具有特性類的條件
Conditional 還可將特性應用於特性類定義。 在此示例中,因此,如果定義了 DEBUG 時,自定義屬性 Documentation 只將信息添加到元數據。
[Conditional("DEBUG")] public class Documentation : System.Attribute { string text; public Documentation(string text) { this.text = text; } } class SampleClass { // This attribute will only be included if DEBUG is defined. [Documentation("This method displays an integer.")] static void DoWork(int i) { System.Console.WriteLine(i.ToString()); } }
使用調用方信息屬性,可以獲取關於調用方的信息傳遞給方法。 可以獲取源代碼、行號在源代碼和調用方的成員名稱的文件路徑。
若要獲取成員調用方信息,請使用適用於可選參數的屬性。 每個可選參數指定默認值。 下表列出了 System.Runtime.CompilerServices 命名空間中定義的調用方信息屬性:
特性 |
說明 |
類型 |
包含調用方源文件的完整路徑。 這是路徑在編譯時。 |
String |
|
在調用方法的源文件中的行號。 |
Integer |
|
方法名稱或調用方的屬性名稱。 有關更多信息,請參見 調用方信息(C# 和 Visual Basic)。 |
String |
有關調用方信息屬性的更多信息,請 調用方信息(C# 和 Visual Basic)參見。
下表列出了特定於 Visual Basic 的屬性。
特性 |
用途 |
---|---|
指示編譯器應顯示類作爲 COM 對象。 |
|
允許訪問模塊成員。只使用模塊需要的該限定。 |
|
在結構指定固定長度字符串的大小。與文件的使用輸入和輸出函數。 |
|
在結構指定一個固定數組的大小爲與文件的使用輸入和輸出函數。 |
COMClassAttribute
使用 COMClassAttribute 簡化創建從 Visual Basic的 COM 組件。 COM 對象是大量使用 .NET Framework 程序集不同,因此,,而無需 COMClassAttribute,您需要經過很多步驟會從 Visual Basic的 COM 對象。 對於標記爲的類 COMClassAttribute,編譯器會自動執行這些步驟中的許多
HideModuleNameAttribute
使用 HideModuleNameAttribute 允許訪問模塊成員。通過只使用模塊需要的該限定。
VBFixedStringAttribute
使用 VBFixedStringAttribute 強制 Visual Basic 創建定長字符串。 字符串的長度在默認情況下是可變的,因此,此屬性很有用,在將字符串存儲到文件中。 下面的代碼對此進行了說明:
VBFixedArrayAttribute
使用 VBFixedArrayAttribute 聲明固定大小的數組。 默認情況下與 Visual Basic 字符串,數組是可變的。 ,在序列化數據或將到文件時,此屬性很有用。