Freigeben über


MethodBuilder.SetImplementationFlags-Methode

Legt die Implementierungsflags für diese Methode fest.

Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Sub SetImplementationFlags ( _
    attributes As MethodImplAttributes _
)
'Usage
Dim instance As MethodBuilder
Dim attributes As MethodImplAttributes

instance.SetImplementationFlags(attributes)
public void SetImplementationFlags (
    MethodImplAttributes attributes
)
public:
void SetImplementationFlags (
    MethodImplAttributes attributes
)
public void SetImplementationFlags (
    MethodImplAttributes attributes
)
public function SetImplementationFlags (
    attributes : MethodImplAttributes
)

Parameter

  • attributes
    Die festzulegenden Implementierungsflags.

Ausnahmen

Ausnahmetyp Bedingung

InvalidOperationException

Der enthaltende Typ wurde bereits mit CreateType erstellt.

– oder –

Für die aktuelle Methode ist die IsGenericMethod-Eigenschaft true, die IsGenericMethodDefinition-Eigenschaft ist jedoch false.

Hinweise

Wenn Sie die SetImplementationFlags-Methode in Verbindung mit der SetCustomAttribute-Methode verwenden, achten Sie auf mögliche Interaktionen. Wenn z. B. mithilfe der SetCustomAttribute-Methode das DllImportAttribute-Attribut hinzugefügt wird, wird auch das MethodImplAttributes.PreserveSig-Flag festlegt. Wenn Sie anschließend die SetImplementationFlags-Methode aufrufen, wird das PreserveSig-Flag überschrieben. Es gibt zwei Möglichkeiten, dies zu verhindern:

  • Rufen Sie die SetImplementationFlags-Methode auf, bevor Sie die SetCustomAttribute-Methode aufrufen. Die SetCustomAttribute-Methode berücksichtigt immer Flags von vorhandenen Methodenimplementierungen.

  • Wenn Sie Implementierungsflags festlegen, rufen Sie die GetMethodImplementationFlags-Methode auf, um die vorhandenen Flags abzurufen, fügen Sie das Flag mithilfe von bitweisem OR hinzu, und rufen Sie anschließend die SetImplementationFlags-Methode auf.

Beispiel

Das folgende Codebeispiel veranschaulicht die kontextabhängige Verwendung der SetImplementationFlags-Methode zum Beschreiben der MSIL-Implementierung in einem Methodenkörper.

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 ...
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 ...
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,
    int.class.ToType(), new Type[] { int.class.ToType(),
    int.class.ToType()});
// 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 ...

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

MethodBuilder-Klasse
MethodBuilder-Member
System.Reflection.Emit-Namespace