Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
A MethodBuilder classe é usada para descrever completamente um método em linguagem intermediária comum (CIL), incluindo o nome, atributos, assinatura e corpo do método. Ele é usado em conjunto com a TypeBuilder classe para criar classes em tempo de execução.
Você pode usar a emissão de reflexão para definir métodos globais e para definir métodos como membros de tipo. As APIs que definem métodos retornam MethodBuilder objetos.
Métodos globais
Um método global é definido usando o ModuleBuilder.DefineGlobalMethod método , que retorna um MethodBuilder objeto.
Os métodos globais devem ser estáticos. Se um módulo dinâmico contiver métodos globais, o ModuleBuilder.CreateGlobalFunctions método deve ser chamado antes de persistir o módulo dinâmico ou o assembly dinâmico que o contém, porque o common language runtime adia a fixação do módulo dinâmico até que todas as funções globais tenham sido definidas.
Um método nativo global é definido usando o ModuleBuilder.DefinePInvokeMethod método. Os métodos de invocação de plataforma (PInvoke) não devem ser declarados abstratos ou virtuais. O tempo de execução define o atributo MethodAttributes.PinvokeImpl para um método de invocação da plataforma.
Métodos como membros de tipos
Um método é definido como um membro do tipo usando o TypeBuilder.DefineMethod método, que retorna um MethodBuilder objeto.
O DefineParameter método é usado para definir os atributos de nome e parâmetro de um parâmetro ou do valor de retorno. O ParameterBuilder objeto retornado por esse método representa um parâmetro ou o valor de retorno. O ParameterBuilder objeto pode ser usado para definir o marshaling, definir o valor constante e aplicar atributos personalizados.
Atributos
Os membros da MethodAttributes enumeração definem o caráter preciso de um método dinâmico:
- Os métodos estáticos são especificados usando o MethodAttributes.Static atributo.
- Os métodos finais (métodos que não podem ser substituídos) são especificados usando o MethodAttributes.Final atributo.
- Os métodos virtuais são especificados usando o MethodAttributes.Virtual atributo.
- Os métodos abstratos são especificados usando o MethodAttributes.Abstract atributo.
- Vários atributos determinam a visibilidade do método. Veja a descrição da MethodAttributes enumeração.
- Os métodos que implementam operadores sobrecarregados devem definir o MethodAttributes.SpecialName atributo.
- Os finalizadores devem definir o MethodAttributes.SpecialName atributo.
Problemas conhecidos
- Embora MethodBuilder seja derivado de MethodInfo, alguns dos métodos abstratos MethodInfo definidos na classe não são totalmente implementados em MethodBuilder. Esses MethodBuilder métodos lançam o NotSupportedException. Por exemplo, o MethodBuilder.Invoke método não está totalmente implementado. Você pode recuperar o tipo envolvente usando os métodos Type.GetType ou Assembly.GetType para refletir sobre esses métodos.
- Modificadores personalizados são suportados.