MethodBuilder.SetImplementationFlags(MethodImplAttributes) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Задает флаги реализации для этого метода.
public:
void SetImplementationFlags(System::Reflection::MethodImplAttributes attributes);
public void SetImplementationFlags(System.Reflection.MethodImplAttributes attributes);
member this.SetImplementationFlags : System.Reflection.MethodImplAttributes -> unit
Public Sub SetImplementationFlags (attributes As MethodImplAttributes)
Параметры
- attributes
- MethodImplAttributes
Флаги реализации, которые необходимо задать.
Исключения
Ранее был создан CreateType()содержащий тип.
–или–
Для текущего метода свойство равноtrue, IsGenericMethod но IsGenericMethodDefinition это falseсвойство.
Примеры
В приведенном ниже примере кода показано контекстное использование SetImplementationFlags метода для описания реализации MSIL в тексте метода.
MethodBuilder myMthdBuilder = myTypeBuilder.DefineMethod("MyMethod",
MethodAttributes.Public,
CallingConventions.HasThis,
typeof(int),
new Type[] { typeof(int),
typeof(int) });
// Specifies that the dynamic method declared above has a an MSIL implementation,
// is managed, synchronized (single-threaded) through the body, and that it
// cannot be inlined.
myMthdBuilder.SetImplementationFlags(MethodImplAttributes.IL |
MethodImplAttributes.Managed |
MethodImplAttributes.Synchronized |
MethodImplAttributes.NoInlining);
// Create an ILGenerator for the MethodBuilder and emit MSIL here ...
Dim myMthdBuilder As MethodBuilder = myTypeBuilder.DefineMethod("MyMethod", _
MethodAttributes.Public, _
CallingConventions.HasThis, _
GetType(Integer), _
New Type() {GetType(Integer), GetType(Integer)})
' Specifies that the dynamic method declared above has a an MSIL implementation,
' is managed, synchronized (single-threaded) through the body, and that it
' cannot be inlined.
myMthdBuilder.SetImplementationFlags((MethodImplAttributes.IL Or _
MethodImplAttributes.Managed Or _
MethodImplAttributes.Synchronized Or _
MethodImplAttributes.NoInlining))
' Create an ILGenerator for the MethodBuilder and emit MSIL here ...
Комментарии
При использовании SetImplementationFlags метода в сочетании с SetCustomAttribute методом следует учитывать потенциальные взаимодействия. Например, использование метода для добавления DllImportAttribute атрибута SetCustomAttribute также задает MethodImplAttributes.PreserveSig флаг. При последующем вызове SetImplementationFlags метода PreserveSig флаг перезаписывается. Избежать этого можно двумя способами:
SetImplementationFlags Вызовите метод перед вызовом SetCustomAttribute метода. Метод SetCustomAttribute всегда учитывает существующие флаги реализации метода.
При установке флагов реализации вызовите GetMethodImplementationFlags метод для получения существующих флагов, используйте побитовое ИЛИ для добавления флага SetImplementationFlags , а затем вызовите метод.