EnumBuilder.SetCustomAttribute Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Establece los atributos personalizados de este método.
Sobrecargas
| SetCustomAttribute(ConstructorInfo, Byte[]) |
Establece un atributo personalizado mediante un blob de atributo personalizado especificado. |
| SetCustomAttribute(CustomAttributeBuilder) |
Establece un atributo personalizado mediante un generador de atributos personalizado. |
SetCustomAttribute(ConstructorInfo, Byte[])
- Source:
- EnumBuilder.cs
- Source:
- EnumBuilder.cs
- Source:
- EnumBuilder.cs
Establece un atributo personalizado mediante un blob de atributo personalizado especificado.
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())
Parámetros
- con
- ConstructorInfo
Constructor para el atributo personalizado.
- binaryAttribute
- Byte[]
Blob de bytes que representa los atributos.
- Atributos
Excepciones
con o binaryAttribute es null.
Ejemplos
En el ejemplo de código siguiente se muestra el uso de SetCustomAttribute en el contexto de EnumBuilder, pasando un blob de bytes.
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
Comentarios
Para obtener información sobre cómo dar formato binaryAttributea , consulte la especificación de metadatos en la especificación de partición II de Common Language Infrastructure (CLI).
Se aplica a
SetCustomAttribute(CustomAttributeBuilder)
- Source:
- EnumBuilder.cs
- Source:
- EnumBuilder.cs
- Source:
- EnumBuilder.cs
Establece un atributo personalizado mediante un generador de atributos personalizado.
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)
Parámetros
- customBuilder
- CustomAttributeBuilder
Instancia de una clase del asistente para definir el atributo personalizado.
Excepciones
con es null.
Ejemplos
En el ejemplo de código siguiente se muestra el uso de SetCustomAttribute en el contexto de EnumBuilder, pasando un 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