Attribute 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示自定義屬性的基類。
public ref class Attribute abstract
public ref class Attribute abstract : System::Runtime::InteropServices::_Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
public abstract class Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
[System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)]
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Attribute : System.Runtime.InteropServices._Attribute
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
type Attribute = class
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
type Attribute = class
interface _Attribute
[<System.AttributeUsage(System.AttributeTargets.All, AllowMultiple=false, Inherited=true)>]
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Attribute = class
interface _Attribute
Public MustInherit Class Attribute
Public MustInherit Class Attribute
Implements _Attribute
- 繼承
-
Attribute
- 衍生
- 屬性
- 實作
範例
下列程式代碼範例示範 Attribute的使用方式。
using namespace System;
using namespace System::Reflection;
// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum class Animal
{
// Pets.
Dog = 1,
Cat, Bird
};
// A custom attribute to allow a target to have a pet.
public ref class AnimalTypeAttribute: public Attribute
{
public:
// The constructor is called when the attribute is set.
AnimalTypeAttribute( Animal pet )
{
thePet = pet;
}
protected:
// Keep a variable internally ...
Animal thePet;
public:
property Animal Pet
{
// .. and show a copy to the outside world.
Animal get()
{
return thePet;
}
void set( Animal value )
{
thePet = value;
}
}
};
// A test class where each method has its own pet.
ref class AnimalTypeTestClass
{
public:
[AnimalType(Animal::Dog)]
void DogMethod(){}
[AnimalType(Animal::Cat)]
void CatMethod(){}
[AnimalType(Animal::Bird)]
void BirdMethod(){}
};
int main()
{
AnimalTypeTestClass^ testClass = gcnew AnimalTypeTestClass;
Type^ type = testClass->GetType();
// Iterate through all the methods of the class.
System::Collections::IEnumerator^ myEnum =
type->GetMethods()->GetEnumerator();
while ( myEnum->MoveNext() )
{
MethodInfo^ mInfo = safe_cast<MethodInfo^>(myEnum->Current);
// Iterate through all the Attributes for each method.
System::Collections::IEnumerator^ myEnum1 =
Attribute::GetCustomAttributes( mInfo )->GetEnumerator();
while ( myEnum1->MoveNext() )
{
Attribute^ attr = safe_cast<Attribute^>(myEnum1->Current);
// Check for the AnimalType attribute.
if ( attr->GetType() == AnimalTypeAttribute::typeid )
Console::WriteLine( "Method {0} has a pet {1} attribute.",
mInfo->Name, (dynamic_cast<AnimalTypeAttribute^>(attr))->Pet );
}
}
}
/*
* Output:
* Method DogMethod has a pet Dog attribute.
* Method CatMethod has a pet Cat attribute.
* Method BirdMethod has a pet Bird attribute.
*/
using System;
using System.Reflection;
// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum Animal {
// Pets.
Dog = 1,
Cat,
Bird,
}
// A custom attribute to allow a target to have a pet.
public class AnimalTypeAttribute : Attribute {
// The constructor is called when the attribute is set.
public AnimalTypeAttribute(Animal pet) {
thePet = pet;
}
// Keep a variable internally ...
protected Animal thePet;
// .. and show a copy to the outside world.
public Animal Pet {
get { return thePet; }
set { thePet = value; }
}
}
// A test class where each method has its own pet.
class AnimalTypeTestClass {
[AnimalType(Animal.Dog)]
public void DogMethod() {}
[AnimalType(Animal.Cat)]
public void CatMethod() {}
[AnimalType(Animal.Bird)]
public void BirdMethod() {}
}
class DemoClass {
static void Main(string[] args) {
AnimalTypeTestClass testClass = new AnimalTypeTestClass();
Type type = testClass.GetType();
// Iterate through all the methods of the class.
foreach(MethodInfo mInfo in type.GetMethods()) {
// Iterate through all the Attributes for each method.
foreach (Attribute attr in
Attribute.GetCustomAttributes(mInfo)) {
// Check for the AnimalType attribute.
if (attr.GetType() == typeof(AnimalTypeAttribute))
Console.WriteLine(
"Method {0} has a pet {1} attribute.",
mInfo.Name, ((AnimalTypeAttribute)attr).Pet);
}
}
}
}
/*
* Output:
* Method DogMethod has a pet Dog attribute.
* Method CatMethod has a pet Cat attribute.
* Method BirdMethod has a pet Bird attribute.
*/
open System
// An enumeration of animals. Start at 1 (0 = uninitialized).
type Animal =
| Dog = 1
| Cat = 2
| Bird = 3
// A custom attribute to allow a target to have a pet.
type AnimalTypeAttribute(pet) =
inherit Attribute()
member val Pet = pet with get, set
// A test class where each method has its own pet.
type AnimalTypeTestClass() =
[<AnimalType(Animal.Dog)>]
member _.DogMethod() = ()
[<AnimalType(Animal.Cat)>]
member _.CatMethod() = ()
[<AnimalType(Animal.Bird)>]
member _.BirdMethod() = ()
let testClass = AnimalTypeTestClass()
let clsType = testClass.GetType()
// Iterate through all the methods of the class.
for mInfo in clsType.GetMethods() do
// Iterate through all the Attributes for each method.
for attr in Attribute.GetCustomAttributes mInfo do
// Check for the AnimalType attribute.
if attr.GetType() = typeof<AnimalTypeAttribute> then
printfn $"Method {mInfo.Name} has a pet {(attr :?> AnimalTypeAttribute).Pet} attribute."
// Output:
// Method DogMethod has a pet Dog attribute.
// Method CatMethod has a pet Cat attribute.
// Method BirdMethod has a pet Bird attribute.
Imports System.Reflection
Public Module CustomAttrVB
' An enumeration of animals. Start at 1 (0 = uninitialized).
Public Enum Animal
' Pets
Dog = 1
Cat
Bird
End Enum
' Visual Basic requires the AttributeUsage be specified.
' A custom attribute to allow a target to have a pet.
<AttributeUsage(AttributeTargets.Method)> _
Public Class AnimalTypeAttribute
Inherits Attribute
' The constructor is called when the attribute is set.
Public Sub New(ByVal animal As Animal)
Me.thePet = animal
End Sub
' Keep a variable internally ...
Protected thePet As Animal
' .. and show a copy to the outside world.
Public Property Pet() As Animal
Get
Return thePet
End Get
Set(ByVal Value As Animal)
thePet = Value
End Set
End Property
End Class
' A test class where each method has its own pet.
Class AnimalTypeTestClass
<AnimalType(Animal.Dog)> _
Public Sub DogMethod()
End Sub
<AnimalType(Animal.Cat)> _
Public Sub CatMethod()
End Sub
<AnimalType(Animal.Bird)> _
Public Sub BirdMethod()
End Sub
End Class
' The runtime test.
Sub Main()
Dim testClass As New AnimalTypeTestClass()
Dim tcType As Type = testClass.GetType()
Dim mInfo As MethodInfo
' Iterate through all the methods of the class.
For Each mInfo In tcType.GetMethods()
Dim attr As Attribute
' Iterate through all the attributes of the method.
For Each attr In Attribute.GetCustomAttributes(mInfo)
If TypeOf attr Is AnimalTypeAttribute Then
Dim attrCustom As AnimalTypeAttribute = _
CType(attr, AnimalTypeAttribute)
Console.WriteLine("Method {0} has a pet {1} attribute.", _
mInfo.Name(), attrCustom.Pet.ToString())
End If
Next
Next
End Sub
End Module
' Output:
' Method DogMethod has a pet Dog attribute.
' Method CatMethod has a pet Cat attribute.
' Method BirdMethod has a pet Bird attribute.
備註
Attribute 類別會將預先定義的系統資訊或使用者定義自定義資訊與目標元素產生關聯。 目標專案可以是元件、類別、建構函式、委派、列舉、事件、欄位、介面、方法、可攜式可執行檔模組、參數、屬性、傳回值、結構或其他屬性。
屬性提供的資訊也稱為元數據。 您可以透過應用程式在運行時間檢查元數據,以控制程式處理數據的方式,或外部工具在運行時間之前,控制應用程式本身的處理和維護方式。 例如,.NET 預先定義並使用屬性類型來控制運行時間行為,而某些程式設計語言會使用屬性類型來代表 .NET 通用類型系統未直接支援的語言功能。
所有屬性類型都會直接或間接衍生自 Attribute 類別。 屬性可以套用至任何目標專案;多個屬性可以套用至相同的目標專案;和屬性可由衍生自目標元素的項目繼承。 使用 AttributeTargets 類別來指定套用屬性的目標專案。
Attribute 類別提供方便的方法,以擷取及測試自定義屬性。 如需使用屬性的詳細資訊,請參閱 套用屬性 和 屬性。
建構函式
Attribute() |
初始化 Attribute 類別的新實例。 |
屬性
TypeId |
在衍生類別中實作時,取得這個 Attribute的唯一標識碼。 |
方法
Equals(Object) |
傳回值,這個值表示這個實例是否等於指定的物件。 |
GetCustomAttribute(Assembly, Type) |
擷取套用至指定元件的自定義屬性。 參數會指定要搜尋的元件和自定義屬性的類型。 |
GetCustomAttribute(Assembly, Type, Boolean) |
擷取套用至元件的自定義屬性。 參數會指定要搜尋的元件、要搜尋的自定義屬性類型,以及忽略的搜尋選項。 |
GetCustomAttribute(MemberInfo, Type) |
擷取套用至型別成員的自定義屬性。 參數會指定要搜尋的成員,以及要搜尋的自定義屬性類型。 |
GetCustomAttribute(MemberInfo, Type, Boolean) |
擷取套用至型別成員的自定義屬性。 參數會指定要搜尋的成員、要搜尋的自定義屬性類型,以及是否要搜尋成員的上階。 |
GetCustomAttribute(Module, Type) |
擷取套用至模組的自定義屬性。 參數會指定要搜尋的模組,以及自定義屬性的類型。 |
GetCustomAttribute(Module, Type, Boolean) |
擷取套用至模組的自定義屬性。 參數會指定要搜尋的模組、要搜尋的自定義屬性類型,以及忽略的搜尋選項。 |
GetCustomAttribute(ParameterInfo, Type) |
擷取套用至方法參數的自定義屬性。 參數會指定要搜尋的方法參數,以及要搜尋的自定義屬性類型。 |
GetCustomAttribute(ParameterInfo, Type, Boolean) |
擷取套用至方法參數的自定義屬性。 參數會指定要搜尋的方法參數、要搜尋的自定義屬性類型,以及是否要搜尋方法參數的上階。 |
GetCustomAttributes(Assembly) |
擷取套用至元件的自定義屬性陣列。 參數會指定元件。 |
GetCustomAttributes(Assembly, Boolean) |
擷取套用至元件的自定義屬性陣列。 參數會指定元件,並指定忽略的搜尋選項。 |
GetCustomAttributes(Assembly, Type) |
擷取套用至元件的自定義屬性陣列。 參數會指定要搜尋的元件,以及自定義屬性的類型。 |
GetCustomAttributes(Assembly, Type, Boolean) |
擷取套用至元件的自定義屬性陣列。 參數會指定要搜尋的元件、要搜尋的自定義屬性類型,以及忽略的搜尋選項。 |
GetCustomAttributes(MemberInfo) |
擷取套用至型別成員的自定義屬性陣列。 參數會指定成員。 |
GetCustomAttributes(MemberInfo, Boolean) |
擷取套用至型別成員的自定義屬性陣列。 參數會指定要搜尋的成員、要搜尋的自定義屬性類型,以及是否要搜尋成員的上階。 |
GetCustomAttributes(MemberInfo, Type) |
擷取套用至型別成員的自定義屬性陣列。 參數會指定要搜尋的成員,以及要搜尋的自定義屬性類型。 |
GetCustomAttributes(MemberInfo, Type, Boolean) |
擷取套用至型別成員的自定義屬性陣列。 參數會指定要搜尋的成員、要搜尋的自定義屬性類型,以及是否要搜尋成員的上階。 |
GetCustomAttributes(Module) |
擷取套用至模組的自定義屬性陣列。 參數會指定模組。 |
GetCustomAttributes(Module, Boolean) |
擷取套用至模組的自定義屬性陣列。 參數會指定模組,並指定忽略的搜尋選項。 |
GetCustomAttributes(Module, Type) |
擷取套用至模組的自定義屬性陣列。 參數會指定要搜尋的模組,以及自定義屬性的類型。 |
GetCustomAttributes(Module, Type, Boolean) |
擷取套用至模組的自定義屬性陣列。 參數會指定要搜尋的模組、要搜尋的自定義屬性類型,以及忽略的搜尋選項。 |
GetCustomAttributes(ParameterInfo) |
擷取套用至方法參數的自定義屬性陣列。 參數會指定方法參數。 |
GetCustomAttributes(ParameterInfo, Boolean) |
擷取套用至方法參數的自定義屬性陣列。 參數會指定方法參數,以及是否要搜尋方法參數的上階。 |
GetCustomAttributes(ParameterInfo, Type) |
擷取套用至方法參數的自定義屬性陣列。 參數會指定要搜尋的方法參數,以及要搜尋的自定義屬性類型。 |
GetCustomAttributes(ParameterInfo, Type, Boolean) |
擷取套用至方法參數的自定義屬性陣列。 參數會指定要搜尋的方法參數、要搜尋的自定義屬性類型,以及是否要搜尋方法參數的上階。 |
GetHashCode() |
傳回這個實例的哈希碼。 |
GetType() |
取得目前實例的 Type。 (繼承來源 Object) |
IsDefaultAttribute() |
在衍生類別中覆寫時,指出這個實例的值是否為衍生類別的預設值。 |
IsDefined(Assembly, Type) |
判斷是否將任何自定義屬性套用至元件。 參數會指定要搜尋的元件,以及自定義屬性的類型。 |
IsDefined(Assembly, Type, Boolean) |
判斷是否將任何自定義屬性套用至元件。 參數會指定要搜尋的元件、要搜尋的自定義屬性類型,以及忽略的搜尋選項。 |
IsDefined(MemberInfo, Type) |
判斷是否將任何自定義屬性套用至型別的成員。 參數會指定要搜尋的成員,以及要搜尋的自定義屬性類型。 |
IsDefined(MemberInfo, Type, Boolean) |
判斷是否將任何自定義屬性套用至型別的成員。 參數會指定要搜尋的成員、要搜尋的自定義屬性類型,以及是否要搜尋成員的上階。 |
IsDefined(Module, Type) |
判斷指定型別的任何自定義屬性是否套用至模組。 參數會指定要搜尋的模組,以及自定義屬性的類型。 |
IsDefined(Module, Type, Boolean) |
判斷是否將任何自定義屬性套用至模組。 參數會指定要搜尋的模組、要搜尋的自定義屬性類型,以及忽略的搜尋選項。 |
IsDefined(ParameterInfo, Type) |
判斷是否將任何自定義屬性套用至方法參數。 參數會指定要搜尋的方法參數,以及要搜尋的自定義屬性類型。 |
IsDefined(ParameterInfo, Type, Boolean) |
判斷是否將任何自定義屬性套用至方法參數。 參數會指定要搜尋的方法參數、要搜尋的自定義屬性類型,以及是否要搜尋方法參數的上階。 |
Match(Object) |
在衍生類別中覆寫時,傳回值,指出這個實例是否等於指定的物件。 |
MemberwiseClone() |
建立目前 Object的淺層複本。 (繼承來源 Object) |
ToString() |
傳回表示目前 物件的字串。 (繼承來源 Object) |
明確介面實作
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
將一組名稱對應至對應的分派標識碼集。 |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
擷取 物件的型別資訊,可用來取得介面的類型資訊。 |
_Attribute.GetTypeInfoCount(UInt32) |
擷取物件提供的類型資訊介面數目(0 或 1)。 |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
提供物件所公開屬性和方法的存取權。 |
適用於
執行緒安全性
此類型是安全線程。