Compartilhar via


Definindo um método com reflexão Emit

Esta seção descreve sistema autônomo usar a reflexão emitir para definir métodos global e para definir métodos sistema autônomo membros de tipo.As APIs que definem métodos de retornam MethodBuilder objetos.

The 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 telefonar especificando uma ação de segurança (como Por solicitação, Declarar, 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 global devem ser estático.Se um módulo dinâmico contém métodos global, a ModuleBuilder.CreateGlobalFunctions método deve ser chamado antes de persistir o módulo dinâmico ou o assembly contendo dinâmico porque o common linguagem tempo de execução adia a correção do módulo dinâmico até que todas as funções global 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.O tempo de execução define o MethodAttributes.PInvokeImpl atributo para uma plataforma de chamar o método.

Um método é definido sistema autônomo um membro de tipo usando o TypeBuilder.DefineMethod método. DefineMethod retorna um MethodBuilder.

The DefineParameter método é usado para conjunto os atributos nome e o parâmetro de um parâmetro ou do valor retornado. The ParameterBuilder objeto retornado por esse método representa um parâmetro ou o valor retornado. ParameterBuilder objeto pode ser usado para conjunto o marshaling, para conjunto o valor da constante e aplicar atributos personalizados.

Observação:

Nas versões do .NET estrutura 1.0 e 1.1, o DefineParameter método não pode ser usado no valor retornado.

Atributos

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

  • Métodos finais, (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 determinam a visibilidade do método.Consulte a descrição do MethodAttributes enumeração.

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

  • Finalizadores devem conjunto o MethodAttributes.SpecialName atributo.

Problemas conhecidos

  • Embora MethodBuilder é derivado de MethodInfo, alguns dos métodos abstratos definidos o MethodInfo classe não são totalmente implementado MethodBuilder.Esses MethodBuilder métodos lançam o NotSupportedException. Por exemplo o MethodBuilder.Invoke método não é totalmente implementado.É possível refletir sobre esses métodos Recuperando um tipo delimitador usando Type.GetType or Assembly.GetType.

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

Consulte também

Outros recursos

Usando o reflexão Emit