この型に対して定義されているすべてのカスタム属性を返します。
Overrides Overloads Public Function GetCustomAttributes( _
ByVal inherit As Boolean _) As Object() Implements ICustomAttributeProvider.GetCustomAttributes
[C#]
public override object[] GetCustomAttributes(boolinherit);
[C++]
public: Object* GetCustomAttributes(boolinherit) __gc[];
[JScript]
public override function GetCustomAttributes(
inherit : Boolean) : Object[];
パラメータ
- inherit
このメンバの継承チェインを検索して属性を見つけるかどうかを指定します。
戻り値
この ConstructorBuilder インスタンスで表されるコンストラクタのすべてのカスタム属性を表すオブジェクトの配列を返します。
実装
ICustomAttributeProvider.GetCustomAttributes
例外
例外の種類 | 条件 |
---|---|
NotSupportedException | このメソッドは現在、不完全な型に対してはサポートされていません。 |
解説
終了型のカスタム属性を取得する代替手段としては、 Type.GetType を使用して型を取得し、返された Type に対して GetCustomAttributes を呼び出します。
次のコード例は、 EnumBuilder のコンテキストで GetCustomAttribute を使用する方法を示しています。
Imports System
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
<AttributeUsage(AttributeTargets.All, AllowMultiple := False)> _
Public Class MyAttribute
Inherits Attribute
Public myBoolValue As Boolean
Public Sub New(myBool As Boolean)
Me.myBoolValue = myBool
End Sub 'New
End Class 'MyAttribute
Class MyApplication
Private Shared myEnumBuilder As EnumBuilder
Public Shared Sub Main()
Try
CreateCallee(Thread.GetDomain())
Dim myAttributesArray As Object() = myEnumBuilder.GetCustomAttributes(True)
' Read the attributes and display them on the console.
Console.WriteLine("Custom attribute contains: ")
Dim index As Integer
For index = 0 To myAttributesArray.Length - 1
If TypeOf myAttributesArray(index) Is MyAttribute Then
Console.WriteLine("myBoolValue: " + CType(myAttributesArray(index), MyAttribute). _
myBoolValue.ToString())
End If
Next index
Catch e As Exception
Console.WriteLine("The following exception is raised:" + e.Message)
End Try
End Sub 'Main
Private Shared Sub CreateCallee(___domain As AppDomain)
Dim myAssemblyName As New AssemblyName()
' Create a name for the assembly.
myAssemblyName.Name = "EmittedAssembly"
' Create the dynamic assembly.
Dim myAssemblyBuilder As AssemblyBuilder = ___domain.DefineDynamicAssembly(myAssemblyName, _
AssemblyBuilderAccess.Run)
Dim myType As Type = GetType(MyAttribute)
Dim myInfo As ConstructorInfo = myType.GetConstructor(New Type() {GetType(Boolean)})
' Create a dynamic module.
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("EmittedModule")
' Create a dynamic Enum.
myEnumBuilder = myModuleBuilder.DefineEnum("MyNamespace.MyEnum", TypeAttributes.Public, _
GetType(Int32))
Dim myFieldBuilder1 As FieldBuilder = myEnumBuilder.DefineLiteral("FieldOne", 1)
Dim myFieldBuilder2 As FieldBuilder = myEnumBuilder.DefineLiteral("FieldTwo", 2)
myEnumBuilder.CreateType()
myEnumBuilder.SetCustomAttribute(myInfo, New Byte() {1, 0, 1})
End Sub 'CreateCallee
End Class 'MyApplication
[C#]
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute : Attribute
{
public bool myBoolValue;
public MyAttribute(bool myBool)
{
this.myBoolValue = myBool;
}
}
class MyApplication
{
static EnumBuilder myEnumBuilder;
public static void Main()
{
try
{
CreateCallee(Thread.GetDomain());
object[] myAttributesArray = myEnumBuilder.GetCustomAttributes(true);
// Read the attributes and display them on the console.
Console.WriteLine("Custom attribute contains: ");
for(int index=0; index < myAttributesArray.Length; index++)
{
if(myAttributesArray[index] is MyAttribute)
{
Console.WriteLine("myBoolValue: " +
((MyAttribute)myAttributesArray[index]).myBoolValue);
}
}
}
catch(Exception e)
{
Console.WriteLine("The following exception is raised:" +e.Message);
}
}
private static void CreateCallee(AppDomain ___domain)
{
AssemblyName myAssemblyName = new AssemblyName();
// Create a name for the assembly.
myAssemblyName.Name = "EmittedAssembly";
// Create the dynamic assembly.
AssemblyBuilder myAssemblyBuilder
= ___domain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run);
Type myType = typeof(MyAttribute);
ConstructorInfo myInfo = myType.GetConstructor(new Type[]{typeof(bool)});
// Create a dynamic module.
ModuleBuilder myModuleBuilder = myAssemblyBuilder.DefineDynamicModule("EmittedModule");
// Create a dynamic Enum.
myEnumBuilder =
myModuleBuilder.DefineEnum("MyNamespace.MyEnum", TypeAttributes.Public, typeof(Int32));
FieldBuilder myFieldBuilder1 = myEnumBuilder.DefineLiteral("FieldOne", 1);
FieldBuilder myFieldBuilder2 = myEnumBuilder.DefineLiteral("FieldTwo", 2);
myEnumBuilder.CreateType();
myEnumBuilder.SetCustomAttribute(myInfo, new byte[]{01,00,01});
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
[AttributeUsage(AttributeTargets::All, AllowMultiple = false)]
public __gc class MyAttribute : public Attribute
{
public:
bool myBoolValue;
public:
MyAttribute(bool myBool)
{
this->myBoolValue = myBool;
}
};
__gc class MyApplication
{
static EnumBuilder* myEnumBuilder;
public:
static void Main()
{
try
{
CreateCallee(Thread::GetDomain());
Object* myAttributesArray[] = myEnumBuilder->GetCustomAttributes(true);
// Read the attributes and display them on the console.
Console::WriteLine(S"Custom attribute contains: ");
for(int index=0; index < myAttributesArray->Length; index++)
{
if(dynamic_cast<MyAttribute*>(myAttributesArray[index]))
{
Console::WriteLine(S"myBoolValue: {0}",
__box((dynamic_cast<MyAttribute*>(myAttributesArray[index]))->myBoolValue));
}
}
}
catch(Exception* e)
{
Console::WriteLine(S"The following exception is raised:{0}", e->Message);
}
}
private:
static void CreateCallee(AppDomain* ___domain)
{
AssemblyName* myAssemblyName = new AssemblyName();
// Create a name for the assembly.
myAssemblyName->Name = S"EmittedAssembly";
// Create the dynamic assembly.
AssemblyBuilder* myAssemblyBuilder
= ___domain->DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess::Run);
Type* myType = __typeof(MyAttribute);
Type* temp0 [] = {__typeof(bool)};
ConstructorInfo* myInfo = myType->GetConstructor(temp0);
// Create a dynamic module.
ModuleBuilder* myModuleBuilder = myAssemblyBuilder->DefineDynamicModule(S"EmittedModule");
// Create a dynamic Enum.
myEnumBuilder =
myModuleBuilder->DefineEnum(S"MyNamespace.MyEnum", TypeAttributes::Public, __typeof(Int32));
FieldBuilder* myFieldBuilder1 = myEnumBuilder->DefineLiteral(S"FieldOne",__box(1));
FieldBuilder* myFieldBuilder2 = myEnumBuilder->DefineLiteral(S"FieldTwo",__box(2));
myEnumBuilder->CreateType();
Byte temp1 [] = {01,00,01};
myEnumBuilder->SetCustomAttribute(myInfo, temp1);
}
};
int main()
{
MyApplication::Main();
}
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
EnumBuilder クラス | EnumBuilder メンバ | System.Reflection.Emit 名前空間 | EnumBuilder.GetCustomAttributes オーバーロードの一覧