Поделиться через


Определение метода с помощью порождаемого отражения

В этом разделе описано использование порождения отражения для определения глобальных методов и определения методов как элементов типов. Интерфейсы API, которые определяют объекты MethodBuilder, возвращаемые методами.

Метод MethodBuilder.AddDeclarativeSecurity добавляет механизм декларативной безопасности в построенный метод. AddDeclarativeSecurity можно вызывать несколько раз, задавая при каждом вызове действие по обеспечению безопасности (такие как Demand, Assert, Deny) и устанавливая разрешения, к которым эти действия применяются.

Глобальный метод определяется с использованием метода ModuleBuilder.DefineGlobalMethod. DefineGlobalMethod возвращает MethodBuilder.

Глобальные методы должны быть статическими. Если динамический модуль содержит глобальные методы, метод ModuleBuilder.CreateGlobalFunctions необходимо вызывать до сохранения такого динамического модуля или содержащей его динамической сборки, потому что общеязыковая среда выполнения откладывает модификацию динамического модуля до тех пор, пока не будут определены все глобальные функции.

Глобальный метод определяется с использованием метода ModuleBuilder.DefinePInvokeMethod. Методы платформенного вызова (PInvoke) не должны объявляться как абстрактные или виртуальные. Среда выполнения устанавливает атрибут MethodAttributes.PInvokeImpl для метода платформенного вызова.

Метод определяется как элемент типа с помощью метода TypeBuilder.DefineMethod. DefineMethod возвращает MethodBuilder.

Метод DefineParameter используется для установки атрибутов имени и параметров, относящихся к параметру или к возвращаемому значению. Объект ParameterBuilder, возвращаемый этим методом, представляет параметр или возвращаемое значение. Объект ParameterBuilder может использоваться для установки маршалинга, для установки постоянного значения или для применения пользовательских атрибутов.

ПримечаниеПримечание

В .NET Framework версии 1.0 и 1.1 метод DefineParameter не может использоваться для возвращаемого значения.

Атрибуты

  • Статические методы задаются с использованием атрибута MethodAttributes.Static.

  • Конечные методы (методы, которые не могут быть переопределены) задаются с помощью атрибута MethodAttributes.Final.

  • Виртуальные методы задаются с использованием атрибута MethodAttributes.Virtual.

  • Абстрактные методы описываются с использованием атрибута MethodAttributes.Abstract.

  • Несколько атрибутов определяют видимость метода. См. описание перечисления MethodAttributes.

  • Методы, реализующие перегруженные операторы, должны устанавливать атрибут MethodAttributes.SpecialName.

  • Средства завершения должны устанавливать атрибут MethodAttributes.SpecialName.

Известные проблемы

  • Хотя класс MethodBuilder является производным из класса MethodInfo, некоторые абстрактные методы, определенные в классе MethodInfo, не реализованы полностью в MethodBuilder. Эти методы MethodBuilder создают исключение NotSupportedException. Например, не полностью реализован метод MethodBuilder.Invoke. Можно выполнить отражение этих методов, получив включающий тип с помощью Type.GetType или Assembly.GetType.

  • В .NET Framework версии 2.0 поддерживаются пользовательские модификаторы. Они не поддерживаются более ранними версиями.

См. также

Другие ресурсы

Использование порождаемого отражения