套用屬性
更新:2007 年 11 月
使用下列程序將屬性套用到您的程式碼項目。
從 .NET Framework 匯入它的命名空間 (Namespace) 來定義新屬性或使用現存的屬性。
將屬性 (Attribute) 放在緊接於程式碼項目之前的位置,藉此將屬性套用到此項目。
每個語言皆有自己的屬性語法。在 C++ 和 C# 中,屬性是以方括號括住,並以可包含分行符號的泛空白字元 (White Space) 與項目分隔。在 Visual Basic 中,屬性是以角括弧括住,並且必須位於相同的邏輯程式敘述行 (Logical Line);如果需要使用分行符號,可以使用行接續符號字元。在 J# 中,會使用特殊的註解語法附加屬性。
指定屬性的位置參數和具名參數。
位置參數是必要項,並且必須在任何具名參數之前,且會對應到一個屬性建構函式 (Constructor) 的參數。具名參數是選擇性參數,且會對應到屬性 (Attribute) 的讀取/寫入屬性 (Property)。在 C++、C# 和 J# 中,為每個選擇性參數指定 name=value,其中 name 為屬性的名稱。在 Visual Basic 中,指定 name:=value。
此屬性會在您編譯程式碼時發送至中繼資料內,並且透過執行階段反映服務,在 Common Language Runtime 和任何自訂工具或應用程式中使用。
依照慣例,所有屬性名稱以 Attribute 作結尾。然而,許多以執行階段為目標的語言,例如 Visual Basic 和 C#,不需要您指定屬性的完整名稱。例如,如果您想要初始化 System.ObsoleteAttribute,就只需要以 Obsolete 參考它。
將屬性套用至方法
下列程式碼範例示範如何宣告 System.ObsoleteAttribute,其標記程式碼為過時的。字串 "Will be removed in next version" 會傳遞至屬性。當呼叫屬性所描述的程式碼時,這個屬性產生編譯器警告以顯示傳遞的字串。
using System;
public class Example
{
// Specify attributes between square brackets in C#.
// This attribute is applied only to the Add method.
[Obsolete("Will be removed in next version.")]
public static int Add(int a, int b)
{
return (a + b);
}
}
class Test
{
static void Main()
{
// This generates a compile-time warning.
int i = Example.Add(2, 2);
}
}
using namespace System;
public ref class Example
{
public:
// Specify attributes between square brackets in C++.
// This attribute is applied only to the Add method.
[Obsolete("Will be removed in next version ")]
static int Add(int a, int b)
{
return (a + b);
}
};
void main()
{
// This generates a compile-time warning.
int i = Example::Add(2, 2);
return;
}
Imports System
Public Class Example
' Specify attributes between angle brackets in Visual Basic,
' and keep them on the same logical line.
' This attribute is applied only to the Add method.
<Obsolete("Will be removed in next version ")> _
Public Shared Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
Return a + b
End Function
End Class
Module Test
Sub Main()
' This generates a compile-time warning.
Dim i As Integer = Example.Add(2, 2)
End Sub
End Module
import System.*;
public class Example
{
// Specify attributes with comment syntax in J#.
// This attribute is applied only to the Add method.
/** @attribute Obsolete("Will be removed in next version") */
public static int Add(int a, int b)
{
return (a + b);
}
}
class Test
{
public static void main()
{
// This generates a compile-time warning.
int MyInt = Example.Add(2,2);
}
}
在組件層級套用屬性
如果您想要在組件 (Assembly) 層級套用屬性,請使用 Assembly 關鍵字。下列程式碼示範在組件層級套用 AssemblyNameAttribute。
using System.Reflection;
[assembly:AssemblyName("MyAssembly")]
using namespace System::Reflection;
[assembly:AssemblyName("MyAssembly")]
Imports System.Reflection
<Assembly:AssemblyName("MyAssembly")>
import System.Reflection.*;
/** @assembly AssemblyName("MyAssembly") */
當套用這個屬性後,"MyAssembly" 字串將被放在檔案的中繼資料裡的組件資訊清單 (Assembly Manifest) 中。您可以使用 MSIL 反組譯工具 (Ildasm.exe) 或者建立擷取屬性的自訂程式來檢視屬性。