(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

DynamicMethod-Klasse

Definiert und stellt eine dynamische Methode dar, die kompiliert ausgeführt und verworfen werden kann. Verworfene Methoden sind für die Garbage Collection verfügbar.

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

[ComVisibleAttribute(true)]
public sealed class DynamicMethod : MethodInfo

Der DynamicMethod-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeDynamicMethod(String, Type, Type[])Initialisiert eine anonym gehostete dynamische Methode und gibt den Methodennamen, Rückgabetyp und Parametertypen an.
Öffentliche MethodeDynamicMethod(String, Type, Type[], Boolean)Initialisiert eine anonym gehostete dynamische Methode unter Angabe von Methodenname, Rückgabetyp und Parametertypen sowie, ob Just-In-Time (JIT)-Sichtbarkeitsprüfungen für Typen und Member übersprungen werden sollen, auf die von der Microsoft intermediate language (MSIL) der dynamischen Methode zugegriffen wird.
Öffentliche MethodeDynamicMethod(String, Type, Type[], Module)Erstellt eine dynamische Methode, die zu einem Modul global ist, unter Angabe von Methodenname, Rückgabetyp, Parametertypen und Modul.
Öffentliche MethodeDynamicMethod(String, Type, Type[], Type)Erstellt eine dynamische Methode unter Angabe von Methodenname, Rückgabetyp, Parametertypen und dem Typ, dem die dynamische Methode logisch zugeordnet ist.
Öffentliche MethodeDynamicMethod(String, Type, Type[], Module, Boolean)Erstellt eine dynamische Methode, die in einem Modul global ist, unter Angabe von Methodenname, Rückgabetyp, Parametertypen und Modul sowie, ob Just-In-Time (JIT)-Sichtbarkeitsprüfungen für Typen und Member übersprungen werden sollen, auf die von der Microsoft intermediate language (MSIL) der dynamischen Methode zugegriffen wird.
Öffentliche MethodeDynamicMethod(String, Type, Type[], Type, Boolean)Erstellt eine dynamische Methode unter Angabe von Methodenname, Rückgabetyp, Parametertypen, dem Typ, dem die dynamische Methode logisch zugeordnet ist, sowie, ob Just-In-Time (JIT)-Sichtbarkeitsprüfungen für Typen und Member bei Zugriffen durch die Microsoft Intermediate Language (MSIL) der dynamischen Methode übersprungen werden.
Öffentliche MethodeDynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Module, Boolean)Erstellt eine dynamische Methode, die in einem Modul global ist, unter Angabe von Methodenname, Attributen, Aufrufkonvention, Rückgabetyp, Parametertypen und Modul sowie, ob Just-In-Time (JIT)-Sichtbarkeitsprüfungen für Typen und Member übersprungen werden sollen, auf die von der Microsoft intermediate language (MSIL) der dynamischen Methode zugegriffen wird.
Öffentliche MethodeDynamicMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type, Boolean)Erstellt eine dynamische Methode unter Angabe von Methodenname, Attributen, Aufrufkonvention, Rückgabetyp, Parametertypen, dem Typ, dem die dynamische Methode logisch zugeordnet ist, sowie, ob Just-In-Time (JIT)-Sichtbarkeitsprüfungen für Typen und Member bei Zugriffen durch die Microsoft Intermediate Language (MSIL) der dynamischen Methode übersprungen werden.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftAttributesRuft die beim Erstellen der dynamischen Methode angegebenen Attribute ab. (Überschreibt MethodBase.Attributes.)
Öffentliche EigenschaftCallingConventionRuft die beim Erstellen der dynamischen Methode angegebene Aufrufkonvention ab. (Überschreibt MethodBase.CallingConvention.)
Öffentliche EigenschaftContainsGenericParametersRuft einen Wert ab, der angibt, ob die generische Methode nicht zugewiesene generische Typparameter enthält. (Von MethodBase geerbt.)
Öffentliche EigenschaftCustomAttributesRuft eine Sammlung ab, die die benutzerdefinierten Attribute dieses Members enthält. (Von MemberInfo geerbt.)
Öffentliche EigenschaftDeclaringTypeRuft den Typ ab, der die Methode deklariert, die für dynamische Methoden immer null ist. (Überschreibt MemberInfo.DeclaringType.)
Öffentliche EigenschaftInitLocalsRuft einen Wert ab, der angibt, ob die lokalen Variablen in der Methode mit 0 (null) initialisiert werden, oder legt diesen fest.
Öffentliche EigenschaftIsAbstractRuft einen Wert ab, der angibt, ob es sich um eine abstrakte Methode handelt. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsAssemblyRuft einen Wert ab, der angibt, ob die potenzielle Sichtbarkeit dieser Methode bzw. dieses Konstruktors von MethodAttributes.Assembly beschrieben wird, d. h., die Methode oder der Konstruktor ist höchstens für andere Typen in derselben Assembly sichtbar, nicht jedoch für abgeleitete Typen außerhalb der Assembly. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsConstructorRuft einen Wert ab, der angibt, ob die Methode ein Konstruktor ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsFamilyRuft einen Wert ab, der angibt, ob die Sichtbarkeit dieser Methode bzw. dieses Konstruktors durch MethodAttributes.Family beschrieben wird, d. h., die Methode oder der Konstruktor ist nur sichtbar innerhalb ihrer bzw. seiner Klassen und in den abgeleiteten Klassen. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsFamilyAndAssemblyRuft einen Wert ab, der angibt, ob die Sichtbarkeit dieser Methode oder dieses Konstruktors durch MethodAttributes.FamANDAssem beschrieben wird, d. h., die Methode oder der Konstruktor kann von abgeleiteten Klassen aufgerufen werden, jedoch nur, wenn sie bzw. er sich in derselben Assembly befindet. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsFamilyOrAssemblyRuft einen Wert ab, der angibt, ob die potenzielle Sichtbarkeit dieser Methode oder dieses Konstruktors durch MethodAttributes.FamORAssem beschrieben wird, d. h., die Methode bzw. der Konstruktor kann von Klassen in derselben Assembly und von abgeleiteten Klassen abgerufen werden, wobei es keine Rolle spielt, an welcher Position sich diese befinden. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsFinalRuft einen Wert ab, der angibt, ob diese Methode final ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsGenericMethodRuft einen Wert ab, der angibt, ob es sich um eine generische Methode handelt. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsGenericMethodDefinitionRuft einen Wert ab, der angibt, ob die Methode eine generische Methodendefinition ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsHideBySigRuft einen Wert ab, der angibt, ob nur ein Member derselben Art mit einer identischen Signatur in der abgeleiteten Klasse verborgen ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsPrivateRuft einen Wert ab, der angibt, ob es sich um einen privaten Member handelt. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsPublicRuft einen Wert ab, der angibt, ob dies eine öffentliche Methode ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsSecurityCriticalRuft einen Wert ab, der angibt, ob die aktuelle dynamische Methode sicherheitsrelevant oder sicherheitsrelevant und sicher zugänglich ist und daher wichtige Vorgänge ausführen darf. (Überschreibt MethodBase.IsSecurityCritical.)
Öffentliche EigenschaftIsSecuritySafeCriticalRuft einen Wert ab, der angibt, ob die aktuelle dynamische Methode auf der aktuellen Vertrauensebene sicherheitsrelevant ist, d. h., ob sie wichtige Vorgänge ausführen darf und ob von transparentem Code auf sie zugegriffen werden kann. (Überschreibt MethodBase.IsSecuritySafeCritical.)
Öffentliche EigenschaftIsSecurityTransparentRuft einen Wert ab, der angibt, ob die aktuelle dynamische Methode auf der aktuellen Vertrauensebene sicherheitstransparent ist und daher keine wichtigen Vorgänge ausführen kann. (Überschreibt MethodBase.IsSecurityTransparent.)
Öffentliche EigenschaftIsSpecialNameRuft einen Wert ab, der angibt, ob diese Methode einen besonderen Namen hat. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsStaticRuft einen Wert ab, der angibt, ob die Methode static ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftIsVirtualRuft einen Wert ab, der angibt, ob die Methode virtual ist. (Von MethodBase geerbt.)
Öffentliche EigenschaftMemberTypeRuft einen MemberTypes-Wert ab, der angibt, dass dieser Member eine Methode ist. (Von MethodInfo geerbt.)
Öffentliche EigenschaftMetadataTokenRuft einen Wert ab, der ein Metadatenelement identifiziert. (Von MemberInfo geerbt.)
Öffentliche EigenschaftMethodHandleWird bei dynamischen Methoden nicht unterstützt. (Überschreibt MethodBase.MethodHandle.)
Öffentliche EigenschaftMethodImplementationFlagsRuft die MethodImplAttributes-Flags ab, die die Attribute einer Methodenimplementierung angeben. (Von MethodBase geerbt.)
Öffentliche EigenschaftModuleRuft das Modul ab, dem die dynamische Methode logisch zugeordnet ist. (Überschreibt MemberInfo.Module.)
Öffentliche EigenschaftNameRuft den Namen der dynamischen Methode ab. (Überschreibt MemberInfo.Name.)
Öffentliche EigenschaftReflectedTypeRuft die Klasse ab, die bei der Reflektion zum Abrufen der Methode verwendet wurde. (Überschreibt MemberInfo.ReflectedType.)
Öffentliche EigenschaftReturnParameterRuft den Rückgabeparameter der dynamischen Methode ab. (Überschreibt MethodInfo.ReturnParameter.)
Öffentliche EigenschaftReturnTypeRuft den Typ des Rückgabewerts für die dynamische Methode ab. (Überschreibt MethodInfo.ReturnType.)
Öffentliche EigenschaftReturnTypeCustomAttributesRuft die benutzerdefinierten Attribute des Rückgabetyps der dynamischen Methode ab. (Überschreibt MethodInfo.ReturnTypeCustomAttributes.)
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeCreateDelegate(Type)Vervollständigt die dynamische Methode und erstellt einen Delegaten, mit der sie ausgeführt werden kann. (Überschreibt MethodInfo.CreateDelegate(Type).)
Öffentliche MethodeCreateDelegate(Type, Object)Vervollständigt die dynamische Methode und erstellt einen Delegaten, mit dem diese ausgeführt werden kann, unter Angabe des Delegattyps und eines Objekts, an das der Delegat gebunden ist. (Überschreibt MethodInfo.CreateDelegate(Type, Object).)
Öffentliche MethodeDefineParameterDefiniert einen Parameter der dynamischen Methode.
Öffentliche MethodeEqualsGibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Von MethodInfo geerbt.)
Öffentliche MethodeGetBaseDefinitionGibt die Basisimplementierung der Methode zurück. (Überschreibt MethodInfo.GetBaseDefinition().)
Öffentliche MethodeGetCustomAttributes(Boolean)Gibt alle benutzerdefinierten Attribute zurück, die für die Methode definiert sind. (Überschreibt MemberInfo.GetCustomAttributes(Boolean).)
Öffentliche MethodeGetCustomAttributes(Type, Boolean)Gibt die auf die Methode angewendeten benutzerdefinierten Attribute des angegebenen Typs zurück. (Überschreibt MemberInfo.GetCustomAttributes(Type, Boolean).)
Öffentliche MethodeGetCustomAttributesDataGibt eine Liste von CustomAttributeData-Objekten zurück, die Daten über die für das Ziel übernommenen Attribute darstellen. (Von MemberInfo geerbt.)
Öffentliche MethodeGetDynamicILInfoGibt ein DynamicILInfo-Objekt zurück, mit dem ein Methodentext aus Metadatentoken, Bereichen und MSIL (Microsoft Intermediate Language)-Streams generiert werden kann.
Öffentliche MethodeGetGenericArgumentsGibt ein Array von Type-Objekten zurück, die die Typargumente einer generischen Methode oder die Typparameter einer generischen Methodendefinition darstellen. (Von MethodInfo geerbt.)
Öffentliche MethodeGetGenericMethodDefinitionGibt ein MethodInfo-Objekt zurück, das eine generische Methodendefinition darstellt, aus der die aktuelle Methode konstruiert werden kann. (Von MethodInfo geerbt.)
Öffentliche MethodeGetHashCodeGibt den Hashcode für diese Instanz zurück. (Von MethodInfo geerbt.)
Öffentliche MethodeGetILGenerator()Gibt einen MSIL-Generator (Microsoft Intermediate Language) für die Methode mit einer MSIL-Standardstreamgröße von 64 Bytes zurück.
Öffentliche MethodeGetILGenerator(Int32)Gibt einen MSIL-Generator (Microsoft Intermediate Language) für die Methode mit der angegebenen MSIL-Streamgröße zurück.
Öffentliche MethodeGetMethodBodyRuft beim Überschreiben in einer abgeleiteten Klasse ein MethodBody-Objekt ab, das den Zugriff auf den MSIL-Stream, auf lokale Variablen und auf Ausnahmen für die aktuelle Methode ermöglicht. (Von MethodBase geerbt.)
Öffentliche MethodeGetMethodImplementationFlagsGibt die Implementierungsflags für die Methode zurück. (Überschreibt MethodBase.GetMethodImplementationFlags().)
Öffentliche MethodeGetParametersGibt die Parameter der dynamischen Methode zurück. (Überschreibt MethodBase.GetParameters().)
Öffentliche MethodeGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeInvoke(Object, Object[])Ruft die Methode oder den Konstruktor, die bzw. der von der aktuellen Instanz dargestellt wird, mit den angegebenen Parametern auf. (Von MethodBase geerbt.)
Öffentliche MethodeInvoke(Object, BindingFlags, Binder, Object[], CultureInfo)Ruft die dynamische Methode mit den angegebenen Parametern, den Einschränkungen des angegebenen Binders und den angegebenen Kulturinformationen auf. (Überschreibt MethodBase.Invoke(Object, BindingFlags, Binder, Object[], CultureInfo).)
Öffentliche MethodeIsDefinedGibt an, ob der angegebene Typ des benutzerdefinierten Attributs definiert ist. (Überschreibt MemberInfo.IsDefined(Type, Boolean).)
Öffentliche MethodeMakeGenericMethodErsetzt die Typparameter der aktuellen generischen Methodendefinition durch die Elemente eines Arrays von Typen und gibt ein MethodInfo-Objekt zurück, das die sich ergebende konstruierte Methode darstellt. (Von MethodInfo geerbt.)
Öffentliche MethodeToStringGibt die Signatur der Methode als Zeichenfolge zurück. (Überschreibt Object.ToString().)
Zum Seitenanfang

  NameBeschreibung
Öffentliche ErweiterungsmethodeGetCustomAttribute(Type)Überladen. Ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, der für einen angegebenen Member angewendet wird. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttribute(Type, Boolean)Überladen. Ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, der für einen angegebenen Member angewendet wird, und überprüft optional die Vorgänger dieses Members. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttribute<T>()Überladen. Ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, der für einen angegebenen Member angewendet wird. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttribute<T>(Boolean)Überladen. Ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, der für einen angegebenen Member angewendet wird, und überprüft optional die Vorgänger dieses Members. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes()Überladen. Ruft eine Auflistung benutzerdefinierter Attribute ab, die für einen angegebenen Member angewendet werden. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes(Type)Überladen. Ruft eine Auflistung benutzerdefinierter Attribute eines angegebenen Typs ab, die für eine angegebenen Member angewendet werden. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes<T>()Überladen. Ruft eine Auflistung benutzerdefinierter Attribute eines angegebenen Typs ab, die für eine angegebenen Member angewendet werden. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes<T>(Boolean)Überladen. Ruft eine Auflistung benutzerdefinierter Attribute eines angegebenen Typs ab, die für einen angegebenen Member angewendet werden, und überprüft optional die Vorgänger dieses Members. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetRuntimeBaseDefinitionRuft ein Objekt ab, das die angegebene Methode der direkten oder indirekten Basisklasse darstellt, in der die Methode am Anfang deklariert wurde. (Durch RuntimeReflectionExtensions definiert.)
Öffentliche ErweiterungsmethodeIsDefinedGibt an, ob irgend welche benutzerdefinierten Attribute eines bestimmten Typs auf eines angegebenen Members angewendet werden. (Durch CustomAttributeExtensions definiert.)
Zum Seitenanfang

  NameBeschreibung
Explizite SchnittstellenimplementierungPrivate Methode_MemberInfo.GetIDsOfNamesOrdnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Von MemberInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MemberInfo.GetTypeRuft ein Type-Objekt ab, das die MemberInfo-Klasse darstellt. (Von MemberInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MemberInfo.GetTypeInfoRuft die Typinformationen für ein Objekt ab, die dann zum Abrufen der Typinformationen für eine Schnittstelle verwendet werden können. (Von MemberInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MemberInfo.GetTypeInfoCountRuft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Von MemberInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MemberInfo.InvokeStellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Von MemberInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodBase.GetIDsOfNamesOrdnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodBase.GetTypeEine Beschreibung dieses Members finden Sie unter _MethodBase.GetType. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodBase.GetTypeInfoRuft die Typinformationen für ein Objekt ab, die dann zum Abrufen der Typinformationen für eine Schnittstelle verwendet werden können. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodBase.GetTypeInfoCountRuft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodBase.InvokeStellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsAbstractEine Beschreibung dieses Members finden Sie unter _MethodBase.IsAbstract. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsAssemblyEine Beschreibung dieses Members finden Sie unter _MethodBase.IsAssembly. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsConstructorEine Beschreibung dieses Members finden Sie unter _MethodBase.IsConstructor. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsFamilyEine Beschreibung dieses Members finden Sie unter _MethodBase.IsFamily. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsFamilyAndAssemblyEine Beschreibung dieses Members finden Sie unter _MethodBase.IsFamilyAndAssembly. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsFamilyOrAssemblyEine Beschreibung dieses Members finden Sie unter _MethodBase.IsFamilyOrAssembly. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsFinalEine Beschreibung dieses Members finden Sie unter _MethodBase.IsFinal. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsHideBySigEine Beschreibung dieses Members finden Sie unter _MethodBase.IsHideBySig. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsPrivateEine Beschreibung dieses Members finden Sie unter _MethodBase.IsPrivate. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsPublicEine Beschreibung dieses Members finden Sie unter _MethodBase.IsPublic. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsSpecialNameEine Beschreibung dieses Members finden Sie unter _MethodBase.IsSpecialName. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsStaticEine Beschreibung dieses Members finden Sie unter _MethodBase.IsStatic. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Eigenschaft_MethodBase.IsVirtualEine Beschreibung dieses Members finden Sie unter _MethodBase.IsVirtual. (Von MethodBase geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodInfo.GetIDsOfNamesOrdnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Von MethodInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodInfo.GetTypeStellt Zugriff auf die GetType-Methode aus COM bereit. (Von MethodInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodInfo.GetTypeInfoRuft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können. (Von MethodInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodInfo.GetTypeInfoCountRuft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Von MethodInfo geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_MethodInfo.InvokeStellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Von MethodInfo geerbt.)
Zum Seitenanfang

Sie können mit der DynamicMethod-Klasse eine Methode zur Laufzeit generieren und ausführen, ohne eine dynamische Assembly oder einen dynamischen Typ erstellen zu müssen, die bzw. der die Methode enthält. Der vom Just-In-Time (JIT)-Compiler erstellte ausführbare Code wird freigegeben, wenn das DynamicMethod-Objekt freigegeben wird. Dynamische Methoden sind die rationellste Möglichkeit, kleine Codemengen zu generieren und auszuführen.

Eine dynamische Methode kann anonym gehostet werden oder einem Modul oder einem Typ logisch zugeordnet sein.

  • Wenn die dynamische Methode anonym gehostet wird, befindet sie sich in einer vom System bereitgestellten Assembly und ist damit von anderem Code isoliert. Standardmäßig erhält sie keinen Zugriff auf nicht öffentliche Daten. Eine anonym gehostete dynamische Methode kann über eine eingeschränkte Fähigkeit zum Überspringen der Sichtbarkeitsprüfungen des JIT-Compilers verfügen, wenn der Methode ReflectionPermission mit dem ReflectionPermissionFlag.RestrictedMemberAccess-Flag gewährt wurde. Die Vertrauensebene der Assembly, auf deren nicht öffentliche Member die dynamische Methode zugreift, muss identisch sein mit oder eine Teilmenge der Vertrauensebene der Aufrufliste darstellen, die die dynamische Methode ausgegeben hat. Weitere Informationen zu anonym gehosteten dynamischen Methoden finden Sie unter Exemplarische Vorgehensweise: Ausgeben von Code in Szenarien mit teilweiser Vertrauenswürdigkeit.

  • Wenn die dynamische Methode einem von Ihnen angegebenen Modul zugeordnet ist, ist die dynamische Methode in diesem Modul global. Sie kann auf alle Typen im Modul und auf alle internal-Member (Friend in Visual Basic) der Typen zugreifen. Sie können eine dynamische Methode jedem Modul zuordnen, unabhängig davon, ob Sie das Modul erstellt haben. Voraussetzung ist lediglich, dass die Aufrufliste, in der sich der Code befindet, eine ReflectionPermission-Anforderung mit dem RestrictedMemberAccess-Flag bereitstellen kann. Wenn die Berechtigung das ReflectionPermissionFlag.MemberAccess-Flag beinhaltet, kann die dynamische Methode die Sichtbarkeitsprüfungen des JIT-Compilers überspringen und auf die privaten Daten aller Typen zugreifen, die im Modul oder in einem beliebigen anderen Modul in einer beliebigen Assembly deklariert wurden.

    HinweisHinweis

    Wenn Sie das Modul angeben, dem eine dynamische Methode zugeordnet ist, darf dieses Modul nicht in der vom System bereitgestellten Assembly enthalten sein, die für anonymes Hosting verwendet wird.

  • Wenn die dynamische Methode einem von Ihnen angegebenen Typ zugeordnet ist, kann sie unabhängig von der Zugriffsebene auf alle Member des Typs zugreifen. Außerdem können JIT-Sichtbarkeitsprüfungen übersprungen werden. Hierdurch erhält die dynamische Methode Zugriff auf die privaten Daten anderer Typen, die in demselben Modul oder einem beliebigen anderen Modul in einer beliebigen Assembly deklariert wurden. Sie können eine dynamische Methode jedem Typ zuordnen, dem Code muss jedoch ReflectionPermission mit dem RestrictedMemberAccess-Flag und dem MemberAccess-Flag gewährt werden.

In der folgenden Tabelle werden die Typen und Member aufgeführt, auf die eine anonym gehostete dynamische Methode mit und ohne JIT-Sichtbarkeitsprüfungen zugreifen kann, je nachdem, ob ReflectionPermission mit dem RestrictedMemberAccess-Flag gewährt wurde.

 

Ohne RestrictedMemberAccess

Mit RestrictedMemberAccess

Ohne Überspringen der JIT-Sichtbarkeitsprüfungen

Öffentliche Member öffentlicher Typen in einer beliebigen Assembly.

Öffentliche Member öffentlicher Typen in einer beliebigen Assembly.

Überspringen der JIT-Sichtbarkeitsprüfungen mit Einschränkungen

Öffentliche Member öffentlicher Typen in einer beliebigen Assembly.

Alle Member aller Typen, aber nur in solchen Assembys, deren Vertrauensebenen identisch sind mit oder kleiner sind als die Vertrauensebene der Assembly, die die dynamische Methode ausgegeben hat.

HinweisHinweis

Vor .NET Framework 2.0 Service Pack 1 benötigte der ausgebende Code ReflectionPermission mit dem ReflectionPermissionFlag.ReflectionEmit-Flag. Diese Berechtigung ist standardmäßig in den benannten Berechtigungssätzen FullTrust und LocalIntranet enthalten, nicht jedoch im Berechtigungssatz Internet. Daher kann eine Bibliothek in früheren Versionen von .NET Framework nur mit Internetberechtigungen verwendet werden, wenn sie über das SecurityCriticalAttribute-Attribtut verfügt und außerdem einen Assert für ReflectionEmit ausführt. Diese Bibliotheken erfordern eine sorgfältige Sicherheitsüberprüfung, da Codierungsfehler zu Sicherheitslücken führen können. In .NET Framework 2.0 SP1 ist es möglich, Code in teilweise vertrauenswürdigen Szenarien ohne Sicherheitsanforderungen auszugeben, da das Generieren von Code an sich keinen privilegierten Vorgang darstellt. Das bedeutet, dass der generierte Code nicht mehr Berechtigungen aufweist als die Assembly, die ihn ausgibt. Bibliotheken, die Code ausgeben, können somit sicherheitstransparent sein und setzen keine ReflectionEmit-Assertion voraus, sodass die Aufgabe zum Schreiben einer sicheren Bibliothek vereinfacht wird. Um diese Funktion zu verwenden, sollte die Anwendung für .NET Framework 3.5 oder höher ausgelegt sein.

Die folgende Tabelle zeigt, auf welche Typen und Member eine dynamische Methode zugreifen kann, die einem Modul oder einem Typ in einem Modul zugeordnet ist.

 

Dem Modul zugeordnet

Dem Typ zugeordnet

Ohne Überspringen der JIT-Sichtbarkeitsprüfungen

Öffentliche und interne Member der öffentlichen, internen und privaten Typen im Modul.

Öffentliche Member öffentlicher Typen in einer beliebigen Assembly.

Alle Member des zugeordneten Typs. Öffentliche und interne Member aller anderen Typen im Modul.

Öffentliche Member öffentlicher Typen in einer beliebigen Assembly.

Mit Überspringen der JIT-Sichtbarkeitsprüfungen

Alle Member aller Typen in einer beliebigen Assembly.

Alle Member aller Typen in einer beliebigen Assembly.

Eine dynamische Methode, die einem Modul zugeordnet ist, verfügt über die Berechtigungen dieses Moduls. Eine dynamische Methode, die einem Typ zugeordnet ist, verfügt über die Berechtigungen des Moduls, das den Typ enthält.

Dynamische Methoden und ihre Parameter müssen nicht benannt werden, Sie können aber Namen angeben, um das Debuggen zu vereinfachen. Benutzerdefinierte Attribute werden für dynamische Methoden und ihre Parameter nicht unterstützt.

Obwohl dynamische Methoden static-Methoden sind (Shared-Methoden in Visual Basic), ermöglichen die seit .NET Framework 2.0 weniger strengen Regeln für die Delegatenbindung das Binden einer dynamischen Methode an ein Objekt, sodass sie bei einem Aufruf durch diese Delegateninstanz wie eine Instanzenmethode funktioniert. Ein Beispiel, in dem dies veranschaulicht wird, finden Sie unter der CreateDelegate(Type, Object)-Methodenüberladung.

HinweisHinweis

In .NET Framework 2.0 unterstützen dynamische Methoden keine Symbolinformationen, d. h. keine lokalen Variablennamen und keine Zeilenzuordnungen. Diese Einschränkung wird möglicherweise in einer zukünftigen Version aufgehoben. Während der Entwicklung können Sie AssemblyBuilder verwenden, um das Debuggen der generierten Microsoft Intermediate Language (MSIL) zu vereinfachen. Anschließend können Sie dynamische Methoden für die endgültige Bereitstellung verwenden, da die ILGenerator-Aufrufe in beiden Fällen identisch sind.

Überprüfung

Die folgende Liste fasst die Bedingungen zusammen, unter denen dynamische Methoden nicht überprüfbaren Code enthalten können. (Eine dynamische Methode ist z. B. nicht überprüfbar, wenn ihre InitLocals-Eigenschaft auf false festgelegt wird.)

  • Eine dynamische Methode, die einer sicherheitskritischen Assembly zugeordnet ist, ist auch sicherheitskritisch und kann die Überprüfung überspringen. Zum Beispiel wird eine Assembly ohne Sicherheitsattribute, die als Desktopanwendung ausgeführt wird, von der Laufzeit als sicherheitskritisch behandelt. Wenn Sie der Assembly eine dynamische Methode zuordnen, kann die dynamische Methode nicht überprüfbaren Code enthalten.

  • Wenn eine dynamische Methode, die nicht überprüfbaren Code enthält, einer Assembly zugeordnet wird, die über Transparenz der Ebene 1 verfügt, fügt der Just-In-Time (JIT)-Compiler eine Sicherheitsanforderung ein. Die Forderung ist nur erfolgreich, wenn die dynamische Methode von voll vertrauenswürdigem Code ausgeführt wird. Siehe Sicherheitstransparenter Code, Ebene 1.

  • Wenn eine dynamische Methode, die nicht überprüfbaren Code enthält, einer Assembly zugeordnet wird, die über Transparenz der Ebene 2 verfügt, beispielsweise mscorlib.dll, wird eine (vom JIT-Compiler eingefügte) Ausnahme ausgelöst und keine Sicherheitsanforderung vorgenommen. Siehe Sicherheitstransparenter Code, Ebene 2.

  • Eine anonym gehostete dynamische Methode, die nicht überprüfbaren Code enthält, löst immer eine Ausnahme aus. Es kann nie die Überprüfung überspringen, auch wenn es durch voll vertrauenswürdigen Code erstellt und ausgeführt wird.

Die Ausnahme, die für nicht überprüfbaren Code ausgelöst wird, hängt von der Methode ab, die dynamische Methode aufzurufen. Wenn Sie eine dynamische Methode mit einem Delegaten aufrufen, der von der CreateDelegate-Methode zurückgegeben wurde, wird eine VerificationException ausgelöst. Wenn Sie die dynamische Methode mit der Invoke-Methode aufrufen, wird eine TargetInvocationException mit einer inneren VerificationException ausgelöst.

Im folgenden Codebeispiel wird eine dynamische Methode erstellt, die zwei Parameter akzeptiert. Im Beispiel wird ein einfacher Funktionsrumpf ausgegeben, der den ersten Parameter an der Konsole ausgibt. Der zweite Parameter wird als der Rückgabewert der Methode verwendet. Im Beispiel wird die Methode durch das Erstellen eines Delegaten vervollständigt, anschließend wird der Delegat mit verschiedenen Parametern aufgerufen, und zum Abschluss wird die dynamische Methode mithilfe der Invoke-Methode aufgerufen.


using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Globalization;

public class Test
{
    // Declare a delegate type that can be used to execute the completed
    // dynamic method. 
    private delegate int HelloDelegate(string msg, int ret);

    public static void Main()
    {
        // Create an array that specifies the types of the parameters
        // of the dynamic method. This dynamic method has a String
        // parameter and an Integer parameter.
        Type[] helloArgs = {typeof(string), typeof(int)};

        // Create a dynamic method with the name "Hello", a return type
        // of Integer, and two parameters whose types are specified by
        // the array helloArgs. Create the method in the module that
        // defines the String class.
        DynamicMethod hello = new DynamicMethod("Hello", 
            typeof(int), 
            helloArgs, 
            typeof(string).Module);

        // Create an array that specifies the parameter types of the
        // overload of Console.WriteLine to be used in Hello.
        Type[] writeStringArgs = {typeof(string)};
        // Get the overload of Console.WriteLine that has one
        // String parameter.
        MethodInfo writeString = typeof(Console).GetMethod("WriteLine", 
            writeStringArgs);

        // Get an ILGenerator and emit a body for the dynamic method,
        // using a stream size larger than the IL that will be
        // emitted.
        ILGenerator il = hello.GetILGenerator(256);
        // Load the first argument, which is a string, onto the stack.
        il.Emit(OpCodes.Ldarg_0);
        // Call the overload of Console.WriteLine that prints a string.
        il.EmitCall(OpCodes.Call, writeString, null);
        // The Hello method returns the value of the second argument;
        // to do this, load the onto the stack and return.
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Ret);

        // Add parameter information to the dynamic method. (This is not
        // necessary, but can be useful for debugging.) For each parameter,
        // identified by position, supply the parameter attributes and a 
        // parameter name.
        hello.DefineParameter(1, ParameterAttributes.In, "message");
        hello.DefineParameter(2, ParameterAttributes.In, "valueToReturn");

        // Create a delegate that represents the dynamic method. This
        // action completes the method. Any further attempts to
        // change the method are ignored.
        HelloDelegate hi = 
            (HelloDelegate) hello.CreateDelegate(typeof(HelloDelegate));

        // Use the delegate to execute the dynamic method.
        Console.WriteLine("\r\nUse the delegate to execute the dynamic method:");
        int retval = hi("\r\nHello, World!", 42);
        Console.WriteLine("Invoking delegate hi(\"Hello, World!\", 42) returned: " + retval);

        // Execute it again, with different arguments.
        retval = hi("\r\nHi, Mom!", 5280);
        Console.WriteLine("Invoking delegate hi(\"Hi, Mom!\", 5280) returned: " + retval);

        Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
        // Create an array of arguments to use with the Invoke method.
        object[] invokeArgs = {"\r\nHello, World!", 42};
        // Invoke the dynamic method using the arguments. This is much
        // slower than using the delegate, because you must create an
        // array to contain the arguments, and value-type arguments
        // must be boxed.
        object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
        Console.WriteLine("hello.Invoke returned: " + objRet);

        Console.WriteLine("\r\n ----- Display information about the dynamic method -----");
        // Display MethodAttributes for the dynamic method, set when 
        // the dynamic method was created.
        Console.WriteLine("\r\nMethod Attributes: {0}", hello.Attributes);

        // Display the calling convention of the dynamic method, set when the 
        // dynamic method was created.
        Console.WriteLine("\r\nCalling convention: {0}", hello.CallingConvention);

        // Display the declaring type, which is always null for dynamic
        // methods.
        if (hello.DeclaringType == null)
        {
            Console.WriteLine("\r\nDeclaringType is always null for dynamic methods.");
        }
        else
        {
            Console.WriteLine("DeclaringType: {0}", hello.DeclaringType);
        }

        // Display the default value for InitLocals.
        if (hello.InitLocals)
        {
            Console.Write("\r\nThis method contains verifiable code.");
        }
        else
        {
            Console.Write("\r\nThis method contains unverifiable code.");
        }
        Console.WriteLine(" (InitLocals = {0})", hello.InitLocals);

        // Display the module specified when the dynamic method was created.
        Console.WriteLine("\r\nModule: {0}", hello.Module);

        // Display the name specified when the dynamic method was created.
        // Note that the name can be blank.
        Console.WriteLine("\r\nName: {0}", hello.Name);

        // For dynamic methods, the reflected type is always null.
        if (hello.ReflectedType == null)
        {
            Console.WriteLine("\r\nReflectedType is null.");
        }
        else
        {
            Console.WriteLine("\r\nReflectedType: {0}", hello.ReflectedType);
        }

        if (hello.ReturnParameter == null)
        {
            Console.WriteLine("\r\nMethod has no return parameter.");
        }
        else
        {
            Console.WriteLine("\r\nReturn parameter: {0}", hello.ReturnParameter);
        }

        // If the method has no return type, ReturnType is System.Void.
        Console.WriteLine("\r\nReturn type: {0}", hello.ReturnType);

        // ReturnTypeCustomAttributes returns an ICustomeAttributeProvider
        // that can be used to enumerate the custom attributes of the
        // return value. At present, there is no way to set such custom
        // attributes, so the list is empty.
        if (hello.ReturnType == typeof(void))
        {
            Console.WriteLine("The method has no return type.");
        }
        else
        {
            ICustomAttributeProvider caProvider = hello.ReturnTypeCustomAttributes;
            object[] returnAttributes = caProvider.GetCustomAttributes(true);
            if (returnAttributes.Length == 0)
            {
                Console.WriteLine("\r\nThe return type has no custom attributes.");
            }
            else
            {
                Console.WriteLine("\r\nThe return type has the following custom attributes:");
                foreach( object attr in returnAttributes )
                {
                    Console.WriteLine("\t{0}", attr.ToString());
                }
            }
        }

        Console.WriteLine("\r\nToString: {0}", hello.ToString());

        // Display parameter information.
        ParameterInfo[] parameters = hello.GetParameters();
        Console.WriteLine("\r\nParameters: name, type, ParameterAttributes");
        foreach( ParameterInfo p in parameters )
        {
            Console.WriteLine("\t{0}, {1}, {2}", 
                p.Name, p.ParameterType, p.Attributes);
        }
    }
}

/* This code example produces the following output:

Use the delegate to execute the dynamic method:

Hello, World!
Invoking delegate hi("Hello, World!", 42) returned: 42

Hi, Mom!
Invoking delegate hi("Hi, Mom!", 5280) returned: 5280

Use the Invoke method to execute the dynamic method:

Hello, World!
hello.Invoke returned: 42

 ----- Display information about the dynamic method -----

Method Attributes: PrivateScope, Public, Static

Calling convention: Standard

DeclaringType is always null for dynamic methods.

This method contains verifiable code. (InitLocals = True)

Module: CommonLanguageRuntimeLibrary

Name: Hello

ReflectedType is null.

Method has no return parameter.

Return type: System.Int32

The return type has no custom attributes.

ToString: Int32 Hello(System.String, Int32)

Parameters: name, type, ParameterAttributes
        message, System.String, In
        valueToReturn, System.Int32, In
 */


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

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

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft