EnumBuilder.SetCustomAttribute 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
設定這個建構函式的自訂屬性。
多載
SetCustomAttribute(ConstructorInfo, Byte[]) |
使用指定的自訂屬性 Blob 來設定自訂屬性。 |
SetCustomAttribute(CustomAttributeBuilder) |
使用自訂屬性產生器來設定自訂屬性。 |
SetCustomAttribute(ConstructorInfo, Byte[])
使用指定的自訂屬性 Blob 來設定自訂屬性。
public:
void SetCustomAttribute(System::Reflection::ConstructorInfo ^ con, cli::array <System::Byte> ^ binaryAttribute);
public void SetCustomAttribute (System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute (System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
member this.SetCustomAttribute : System.Reflection.ConstructorInfo * byte[] -> unit
[<System.Runtime.InteropServices.ComVisible(true)>]
member this.SetCustomAttribute : System.Reflection.ConstructorInfo * byte[] -> unit
Public Sub SetCustomAttribute (con As ConstructorInfo, binaryAttribute As Byte())
參數
- con
- ConstructorInfo
自訂屬性的建構函式。
- binaryAttribute
- Byte[]
代表屬性的位元組 Blob。
- 屬性
例外狀況
con
或 binaryAttribute
為 null
。
範例
下列程式代碼範例說明 SetCustomAttribute
在的內容 EnumBuilder中使用 ,並傳遞位元組 Blob。
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
[AttributeUsage(AttributeTargets::All,AllowMultiple=false)]
public ref class MyAttribute: public Attribute
{
public:
bool myBoolValue;
MyAttribute( bool myBool )
{
this->myBoolValue = myBool;
}
};
ref class MyApplication
{
private:
static EnumBuilder^ myEnumBuilder;
public:
static void Main()
{
try
{
CreateCallee( Thread::GetDomain() );
array<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 ( dynamic_cast<MyAttribute^>(myAttributesArray[ index ]) )
{
Console::WriteLine( "myBoolValue: {0}", (dynamic_cast<MyAttribute^>(myAttributesArray[ index ]))->myBoolValue );
}
}
}
catch ( Exception^ e )
{
Console::WriteLine( "The following exception is raised:{0}", e->Message );
}
}
private:
static void CreateCallee( AppDomain^ domain )
{
AssemblyName^ myAssemblyName = gcnew AssemblyName;
// Create a name for the assembly.
myAssemblyName->Name = "EmittedAssembly";
// Create the dynamic assembly.
AssemblyBuilder^ myAssemblyBuilder = domain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );
Type^ myType = MyAttribute::typeid;
array<Type^>^temp0 = {bool::typeid};
ConstructorInfo^ myInfo = myType->GetConstructor( temp0 );
// Create a dynamic module.
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->DefineDynamicModule( "EmittedModule" );
// Create a dynamic Enum.
myEnumBuilder = myModuleBuilder->DefineEnum( "MyNamespace.MyEnum", TypeAttributes::Public, Int32::typeid );
FieldBuilder^ myFieldBuilder1 = myEnumBuilder->DefineLiteral( "FieldOne", 1 );
FieldBuilder^ myFieldBuilder2 = myEnumBuilder->DefineLiteral( "FieldTwo", 2 );
myEnumBuilder->CreateType();
array<Byte>^temp1 = {01,00,01};
myEnumBuilder->SetCustomAttribute( myInfo, temp1 );
}
};
int main()
{
MyApplication::Main();
}
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute2 : Attribute
{
public bool myBoolValue;
public MyAttribute2(bool myBool)
{
this.myBoolValue = myBool;
}
}
class MyApplication2
{
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 MyAttribute2)
{
Console.WriteLine("myBoolValue: " +
((MyAttribute2)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(MyAttribute2);
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});
}
}
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
End Class
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
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
End Class
備註
如需如何格式化 binaryAttribute
的詳細資訊,請參閱 Common Language Infrastructure (CLI) 規格之分割區 II 中的元數據規格。
適用於
SetCustomAttribute(CustomAttributeBuilder)
使用自訂屬性產生器來設定自訂屬性。
public:
void SetCustomAttribute(System::Reflection::Emit::CustomAttributeBuilder ^ customBuilder);
public void SetCustomAttribute (System.Reflection.Emit.CustomAttributeBuilder customBuilder);
member this.SetCustomAttribute : System.Reflection.Emit.CustomAttributeBuilder -> unit
Public Sub SetCustomAttribute (customBuilder As CustomAttributeBuilder)
參數
- customBuilder
- CustomAttributeBuilder
定義自訂屬性的協助程式類別執行個體。
例外狀況
con
為 null
。
範例
下列程式代碼範例說明 SetCustomAttribute
在的內容 EnumBuilder中使用 ,並傳遞 CustomAttributeBuilder。
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
[AttributeUsage(AttributeTargets::All,AllowMultiple=false)]
public ref class MyAttribute: public Attribute
{
public:
bool myBoolValue;
MyAttribute( bool myBool )
{
this->myBoolValue = myBool;
}
};
ref class MyApplication
{
private:
static EnumBuilder^ myEnumBuilder;
public:
static void Main()
{
try
{
CreateCallee( Thread::GetDomain() );
array<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 ( dynamic_cast<MyAttribute^>(myAttributesArray[ index ]) )
{
Console::WriteLine( "myBoolValue: {0}", (dynamic_cast<MyAttribute^>(myAttributesArray[ index ]))->myBoolValue );
}
}
}
catch ( Exception^ e )
{
Console::WriteLine( "The following exception is raised:{0}", e->Message );
}
}
private:
static void CreateCallee( AppDomain^ domain )
{
AssemblyName^ myAssemblyName = gcnew AssemblyName;
// Create a name for the assembly.
myAssemblyName->Name = "EmittedAssembly";
// Create the dynamic assembly.
AssemblyBuilder^ myAssemblyBuilder = domain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );
Type^ myType = MyAttribute::typeid;
array<Type^>^temp0 = {bool::typeid};
ConstructorInfo^ myInfo = myType->GetConstructor( temp0 );
// Create a dynamic module.
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->DefineDynamicModule( "EmittedModule" );
// Create a dynamic Enum.
myEnumBuilder = myModuleBuilder->DefineEnum( "MyNamespace.MyEnum", TypeAttributes::Public, Int32::typeid );
FieldBuilder^ myFieldBuilder1 = myEnumBuilder->DefineLiteral( "FieldOne", 1 );
FieldBuilder^ myFieldBuilder2 = myEnumBuilder->DefineLiteral( "FieldTwo", 2 );
myEnumBuilder->CreateType();
array<Byte>^temp1 = {01,00,01};
myEnumBuilder->SetCustomAttribute( myInfo, temp1 );
}
};
int main()
{
MyApplication::Main();
}
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute2 : Attribute
{
public bool myBoolValue;
public MyAttribute2(bool myBool)
{
this.myBoolValue = myBool;
}
}
class MyApplication2
{
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 MyAttribute2)
{
Console.WriteLine("myBoolValue: " +
((MyAttribute2)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(MyAttribute2);
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});
}
}
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
End Class
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
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
End Class