Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Classe CustomAttributeBuilder

Ajuda a cria atributos personalizados.

System.Object
  System.Reflection.Emit.CustomAttributeBuilder

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (em mscorlib.dll)
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class CustomAttributeBuilder : _CustomAttributeBuilder

O tipo CustomAttributeBuilder expõe os membros a seguir.

  NomeDescrição
Método públicoCustomAttributeBuilder(ConstructorInfo, Object[])Inicializa uma instância da CustomAttributeBuilder dado o construtor para o atributo personalizado e os argumentos para o construtor de classe.
Método públicoCustomAttributeBuilder(ConstructorInfo, Object[], FieldInfo[], Object[])Inicializa uma instância da CustomAttributeBuilder classe dado o construtor para o atributo personalizado, os argumentos para o construtor e um conjunto de pares nome/valor do campo.
Método públicoCustomAttributeBuilder(ConstructorInfo, Object[], PropertyInfo[], Object[])Inicializa uma instância da CustomAttributeBuilder classe dado o construtor para o atributo personalizado, os argumentos para o construtor e um conjunto de pares de propriedade ou o valor nomeados.
Método públicoCustomAttributeBuilder(ConstructorInfo, Object[], PropertyInfo[], Object[], FieldInfo[], Object[])Inicializa uma instância da CustomAttributeBuilder classe dado o construtor para o atributo personalizado, os argumentos para o construtor, um conjunto de pares de propriedade ou o valor nomeados e um conjunto de pares de campo ou valor é chamada.
Superior
  NomeDescrição
Método públicoEquals(Object) Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)
Método protegidoFinalize Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)
Método públicoGetHashCodeServe como uma função hash para um tipo específico. (Herdado de Object.)
Método públicoGetType Obtém o Type da instância atual. (Herdado de Object.)
Método protegidoMemberwiseCloneCria uma cópia superficial do Object atual. (Herdado de Object.)
Método públicoToStringRetorna uma string que representa o objeto atual. (Herdado de Object.)
Superior
  NomeDescrição
Implementação explícita da interfaceMétodo particular_CustomAttributeBuilder.GetIDsOfNamesMapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.
Implementação explícita da interfaceMétodo particular_CustomAttributeBuilder.GetTypeInfoRecupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.
Implementação explícita da interfaceMétodo particular_CustomAttributeBuilder.GetTypeInfoCountRecupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1).
Implementação explícita da interfaceMétodo particular_CustomAttributeBuilder.InvokeFornece acesso a propriedades e métodos expostos por um objeto.
Superior

Use o CustomAttributeBuilder objeto retornado pelo construtor para descrever o atributo personalizado. Associar o CustomAttribute com uma instância do construtor, chamando o SetCustomAttribute método nessa instância do construtor. Por exemplo, criar um CustomAttributeBuilder para descrever uma instância de AssemblyCultureAttribute , fornecendo o construtor da AssemblyCultureAttribute e seu argumento. Em seguida, chame SetCustomAttribute em um AssemblyBuilder para estabelecer a associação.

ObservaçãoObservação

O atributo HostProtectionAttribute aplicado a este tipo ou membro tem o seguinte valor da propriedade Resources: MayLeakOnAbort. HostProtectionAttribute não afeta aplicativos de área de trabalho (que são normalmente iniciados com o clique duplo em um ícone, a digitação de um comando ou a inserção de uma URL em um navegador). Para obter mais informações, consulte a classe HostProtectionAttribute ou Atributos de proteção de Host e programação de SQL Server.

O exemplo de código a seguir ilustra o uso do CustomAttributeBuilder.



using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;


// We will apply this custom attribute to our dynamic type.
public class ClassCreator: Attribute

{
   private string creator;
   public string Creator 
   {
	get
	{
	   return creator;
	}
   }	

   public ClassCreator(string name)
   {
      this.creator = name;
   }

}

// We will apply this dynamic attribute to our dynamic method.
public class DateLastUpdated: Attribute

{
   private string dateUpdated;
   public string DateUpdated
   {
   	get
	{
	   return dateUpdated;
	}
   }

   public DateLastUpdated(string theDate)
   {
	this.dateUpdated = theDate;
   } 

}

class MethodBuilderCustomAttributesDemo

{

   public static Type BuildTypeWithCustomAttributesOnMethod()
   {
	
	AppDomain currentDomain = Thread.GetDomain();
	
	AssemblyName myAsmName = new AssemblyName();
	myAsmName.Name = "MyAssembly";

	AssemblyBuilder myAsmBuilder = currentDomain.DefineDynamicAssembly(
				       myAsmName, AssemblyBuilderAccess.Run);

	ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule("MyModule");

	// First, we'll build a type with a custom attribute attached.

	TypeBuilder myTypeBuilder = myModBuilder.DefineType("MyType",
						TypeAttributes.Public);
	
	Type[] ctorParams = new Type[] { typeof(string) };
	ConstructorInfo classCtorInfo = typeof(ClassCreator).GetConstructor(ctorParams);

	CustomAttributeBuilder myCABuilder = new CustomAttributeBuilder(
						classCtorInfo,
						new object[] { "Joe Programmer" });

	myTypeBuilder.SetCustomAttribute(myCABuilder);

	// Now, let's build a method and add a custom attribute to it.

	MethodBuilder myMethodBuilder = myTypeBuilder.DefineMethod("HelloWorld",
					MethodAttributes.Public,
					null,
					new Type[] { });

	ctorParams = new Type[] { typeof(string) };
	classCtorInfo = typeof(DateLastUpdated).GetConstructor(ctorParams);

	CustomAttributeBuilder myCABuilder2 = new CustomAttributeBuilder(
						classCtorInfo,
						new object[] { DateTime.Now.ToString() });

	myMethodBuilder.SetCustomAttribute(myCABuilder2);

	ILGenerator myIL = myMethodBuilder.GetILGenerator();

	myIL.EmitWriteLine("Hello, world!");
	myIL.Emit(OpCodes.Ret);

	return myTypeBuilder.CreateType();
	
   }

   public static void Main() 
   {

	Type myType = BuildTypeWithCustomAttributesOnMethod();

	object myInstance = Activator.CreateInstance(myType);

	object[] customAttrs = myType.GetCustomAttributes(true);

	Console.WriteLine("Custom Attributes for Type 'MyType':");

	object attrVal = null;

	foreach (object customAttr in customAttrs) 
   	{
	   attrVal = typeof(ClassCreator).InvokeMember("Creator", 
					  BindingFlags.GetProperty,
					  null, customAttr, new object[] { });
	   Console.WriteLine("-- Attribute: [{0} = \"{1}\"]", customAttr, attrVal);
        }

	Console.WriteLine("Custom Attributes for Method 'HelloWorld()' in 'MyType':");

	customAttrs = myType.GetMember("HelloWorld")[0].GetCustomAttributes(true);	

	foreach (object customAttr in customAttrs) 
   	{
	   attrVal = typeof(DateLastUpdated).InvokeMember("DateUpdated", 
					  BindingFlags.GetProperty,
					  null, customAttr, new object[] { });
	   Console.WriteLine("-- Attribute: [{0} = \"{1}\"]", customAttr, attrVal);
        }

	Console.WriteLine("---");

	Console.WriteLine(myType.InvokeMember("HelloWorld",
			  BindingFlags.InvokeMethod,
			  null, myInstance, new object[] { }));
						   
	
   }

}



.NET Framework

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte .Requisitos de sistema do NET Framework.
Quaisquer membros estático (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.