關于應用特性的更多內容
至此,我們演示了特性的簡單使用,都是為方法應用單個特性。本節將講述特性的其他使
用方式。
多個特性
可以為單個結構應用多個特性。
- 多個特性可以使用下面任何一種格式列出。
- 獨立的特性片段一個接一個。通常,它們彼此疊加,位于不同的行中。
- 單個特性片段,特性之間使用逗號分隔。
- 可以以任何次序列出特性。
例如,下面的兩個代碼片段顯示了應用多個特性的兩種方式。兩個片段的代碼是等價的。
[Serializable]
[MyAttribute("Simple class","Version 3.57")][MyAttribute("Simple class","Version 3.57"),Serializable]
其他類型的目標
除了類,還可以將特性應用到諸如字段和屬性等其他程序結構。以下的聲明顯示了字段上的
特性以及方法上的多個特性:
[MyAttribute("Holds a value","Version 3.2")] //字段上的特性
public int MyField;[Obsolete]
[MyAttribute("Prints out a message","Version 3.6")] //方法上的特性
public void PrintOut()
{...
}
還可以顯式地標注特性,從而將它應用到特殊的目標結構。要使用顯式目標說明符,在特性
片段的開始處放置目標類型,后面跟冒號。例如,如下的代碼用特性裝飾方法,并且還把特性應
用到返回值上。
如表25-3所列,C#語言定義了10個標準的特性目標。大多數目標名是自解釋的,而tyPe覆蓋
了類、結構、委托、枚舉和接口。typevar目標名稱為使用泛型的結構指定類型參數。
----------------------------
event | field
method | param
property | return
type | typevar
assembly | module
----------------------------
全局特性
還可以通過使用assembly和module目標名稱來使用顯式目標說明符把特性設置在程序集或
模塊級別。(程序集和模塊在第22章中解釋過。)有關程序集級別的特性的要點如下:
- 程序集級別的特性必須放置在任何命名空間之外,并且通常放置在AssemblyInfo.cs文件中;
- Assemblylnfo.cs文件通常包含有關公司、產品以及版權信息的元數據。
如下的代碼行摘自Assemblylnfo.cs文件:
[assembly:AssemblyTitle("SuperWidget")]
[assembly:AssemblyDescription("Implements the SuperWidget product.")]
[assembly:AssemblyConfiguration("")]
[assembly:AssemblyCompany("McArthur Widget,Inc.")]
[assembly:AssemblyProduct("Super Widget Deluxe")]
[assembly:AssemblyCopyright("Copyright @ McArthur Widgets 2012)]
[assembly:AssemblyTradmark("")]
[assembly:AssemblyCulture("")]