MethodBuilder.SetImplementationFlags(MethodImplAttributes) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Nastaví příznaky implementace pro tuto metodu.
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)
Parametry
- attributes
- MethodImplAttributes
Příznaky implementace, které se mají nastavit.
Výjimky
Obsahující typ byl dříve vytvořen pomocí .CreateType()
-nebo-
Pro aktuální metodu IsGenericMethod je true
vlastnost , ale IsGenericMethodDefinition vlastnost je false
.
Příklady
Následující ukázka kódu znázorňuje kontextové použití SetImplementationFlags
metody k popisu implementace jazyka MSIL v těle metody.
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 ...
Poznámky
Při použití SetImplementationFlags metody v kombinaci s metodou SetCustomAttribute mějte na paměti potenciální interakce. Například použití SetCustomAttribute metody pro přidání atributu DllImportAttribute také nastaví MethodImplAttributes.PreserveSig příznak. Pokud následně zavoláte metodu SetImplementationFlags , PreserveSig příznak se přepíše. Existují dva způsoby, jak se tomu vyhnout:
Před voláním SetImplementationFlags metody zavolejte metodu SetCustomAttribute . Metoda SetCustomAttribute vždy respektuje existující příznaky implementace metody.
Při nastavování příznaků implementace volejte metodu GetMethodImplementationFlags pro načtení existujících příznaků, přidejte příznak pomocí bitové metody OR a pak volejte metodu SetImplementationFlags .