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.