Compartilhar via


Definindo um método com reflexão emitir.

Esta seção descreve como usar a reflexão emitir para definir métodos globais e para definir métodos como membros de tipo. As APIs que definem os métodos retornam MethodBuilder objetos.

O MethodBuilder.AddDeclarativeSecurity método adiciona segurança declarativa para um método que está sendo criado. AddDeclarativeSecurity pode ser chamado várias vezes com cada chamada, especificando uma ação de segurança (como demanda, Assert, Negar) e um conjunto de permissões que a ação se aplica.

Um método global é definido usando o ModuleBuilder.DefineGlobalMethod método. DefineGlobalMethod retorna um MethodBuilder.

Métodos globais devem ser estáticos. Se um módulo dinâmico contém métodos globais, o ModuleBuilder.CreateGlobalFunctions método deve ser chamado antes de persistência do módulo dinâmico ou o assembly dinâmico contendo porque o common language runtime adia a correção do módulo dinâmico até que todas as funções globais foram definidas.

Um método nativo global é definido usando o método ModuleBuilder.DefinePInvokeMethod. Invocação de plataforma (PInvoke) métodos não devem ser declarados abstrato ou virtual. Os conjuntos de tempo de execução de MethodAttributes.PInvokeImpl atributo para uma plataforma de invocar o método.

Um método é definido como um membro de tipo usando o TypeBuilder.DefineMethod método. DefineMethod retorna um MethodBuilder.

O DefineParameter método é usado para definir os atributos de nome e o parâmetro de um parâmetro ou valor de retorno. O ParameterBuilder retornado por esse método de objeto representa um parâmetro ou valor de retorno. ParameterBuilderobjeto pode ser usado para definir o empacotamento, para definir o valor da constante e aplicar atributos personalizados.

Observação

No.NET Framework versões 1.0 e 1.1, o DefineParameter método não pode ser usado o valor de retorno.

Atributos

  • Métodos estáticos são especificados usando o MethodAttributes.Static atributo.

  • Métodos de finais (os métodos não podem ser substituídos) são especificados usando o MethodAttributes.Final atributo.

  • Métodos virtuais são especificados usando o MethodAttributes.Virtual atributo.

  • Métodos abstratos são especificados usando o MethodAttributes.Abstract atributo.

  • Vários atributos que determinam a visibilidade do método. Consulte a descrição do MethodAttributes enumeração.

  • Métodos que implementam os operadores sobrecarregados devem definir o MethodAttributes.SpecialName atributo.

  • Finalizadores devem definir o MethodAttributes.SpecialName atributo.

Problemas conhecidos

  • Embora MethodBuilder é derivada de MethodInfo, alguns dos métodos abstratos definidos o MethodInfo classe não são totalmente implementado em MethodBuilder. Essas MethodBuilder métodos lançam o NotSupportedException. Por exemplo o MethodBuilder.Invoke método não é totalmente implementado. Você pode refletir sobre esses métodos, recuperando o tipo de delimitador usando Type. GetType ou Assembly.GetType.

  • Modificadores personalizados são compatíveis com o.NET Framework versão 2.0. Eles não são suportados nas versões anteriores.

Consulte também

Outros recursos

Usando a reflexão emitir.