MethodBuilder.SetImplementationFlags(MethodImplAttributes) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Legt die Implementierungsflags für diese Methode fest.
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)
Parameter
- attributes
- MethodImplAttributes
Die festzulegenden Implementierungsflags.
Ausnahmen
Der enthaltende Typ wurde zuvor mit CreateType() erstellt.
- oder -
Für die aktuelle Methode ist die IsGenericMethod-Eigenschaft true
, aber die IsGenericMethodDefinition-Eigenschaft ist false
.
Beispiele
Im folgenden Codebeispiel wird die kontextbezogene Verwendung der SetImplementationFlags
-Methode veranschaulicht, um die Implementierung von MSIL in einem Methodentext zu beschreiben.
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 ...
Hinweise
Wenn Sie die SetImplementationFlags -Methode in Kombination mit der SetCustomAttribute -Methode verwenden, sollten Sie sich über potenzielle Interaktionen bewusst sein. Wenn Sie beispielsweise die SetCustomAttribute -Methode zum Hinzufügen des DllImportAttribute Attributs verwenden, wird auch das MethodImplAttributes.PreserveSig Flag festgelegt. Wenn Sie die SetImplementationFlags Methode anschließend aufrufen, wird das PreserveSig Flag überschrieben. Dies kann auf zwei Arten vermieden werden:
Rufen Sie die SetImplementationFlags -Methode auf, bevor Sie die SetCustomAttribute -Methode aufrufen. Die SetCustomAttribute Methode berücksichtigt immer vorhandene Methodenimplementierungsflags.
Wenn Sie Implementierungsflags festlegen, rufen Sie die GetMethodImplementationFlags -Methode auf, um die vorhandenen Flags abzurufen, verwenden Sie bitweise OR, um Ihr Flag hinzuzufügen, und rufen Sie dann die SetImplementationFlags -Methode auf.