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().
-или-
Для текущего метода свойство IsGenericMethod имеет значение true
, но свойство IsGenericMethodDefinition имеет значение false
.
Примеры
В приведенном ниже примере кода показано контекстное использование SetImplementationFlags
метода для описания реализации MSIL в теле метода.
array<Type^>^ temp0 = { int::typeid, int::typeid };
MethodBuilder^ myMthdBuilder = myTypeBuilder->DefineMethod( "MyMethod",
MethodAttributes::Public,
CallingConventions::HasThis,
int::typeid,
temp0 );
// 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)(
MethodImplAttributes::IL |
MethodImplAttributes::Managed |
MethodImplAttributes::Synchronized |
MethodImplAttributes::NoInlining) );
// Create an ILGenerator for the MethodBuilder and emit MSIL here ...
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 следует учитывать потенциальные взаимодействия. Например, использование SetCustomAttribute метода для добавления атрибута DllImportAttribute также задает MethodImplAttributes.PreserveSig флаг . При последующем вызове SetImplementationFlags метода PreserveSig флаг перезаписывается. Этого можно избежать двумя способами:
Вызовите SetImplementationFlags метод перед вызовом SetCustomAttribute метода . Метод SetCustomAttribute всегда учитывает существующие флаги реализации метода.
При установке флагов реализации вызовите GetMethodImplementationFlags метод , чтобы получить существующие флаги, используйте побитовое ИЛИ для добавления флага SetImplementationFlags , а затем вызовите метод .