Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

AssemblyBuilder-Klasse

Definiert eine dynamische Assembly und stellt diese dar.

System.Object
  System.Reflection.Assembly
    System.Reflection.Emit.AssemblyBuilder

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class AssemblyBuilder : Assembly, 
	_AssemblyBuilder

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

  NameBeschreibung
Öffentliche EigenschaftCodeBaseRuft den ursprünglich angegebenen Speicherort der Assembly ab, z. B. in einem AssemblyName-Objekt. (Überschreibt Assembly.CodeBase.)
Öffentliche EigenschaftCustomAttributesRuft eine Sammlung ab, die die benutzerdefinierten Attribute dieser Assembly enthält. (Von Assembly geerbt.)
Öffentliche EigenschaftDefinedTypesRuft eine Auflistung der Typen ab, die in dieser Assembly definiert sind. (Von Assembly geerbt.)
Öffentliche EigenschaftEntryPointGibt den Einstiegspunkt dieser Assembly zurück. (Überschreibt Assembly.EntryPoint.)
Öffentliche EigenschaftEscapedCodeBaseRuft den URI einschließlich Escapezeichen ab, der die CodeBase darstellt. (Von Assembly geerbt.)
Öffentliche EigenschaftEvidenceRuft den Beweis für diese Assembly ab. (Überschreibt Assembly.Evidence.)
Öffentliche EigenschaftExportedTypesRuft eine Auflistung der in dieser Assembly definierten öffentlichen Typen ab, die außerhalb der Assembly sichtbar sind. (Von Assembly geerbt.)
Öffentliche EigenschaftFullNameRuft den Anzeigenamen der aktuellen dynamischen Assembly ab. (Überschreibt Assembly.FullName.)
Öffentliche EigenschaftGlobalAssemblyCacheRuft einen Wert ab, der angibt, ob die Assembly aus dem globalen Assemblycache geladen wurde. (Überschreibt Assembly.GlobalAssemblyCache.)
Öffentliche EigenschaftHostContextRuft den Hostkontext ab, in dem die dynamische Assembly erstellt wird. (Überschreibt Assembly.HostContext.)
Öffentliche EigenschaftImageRuntimeVersionRuft die Version der Common Language Runtime ab, die in der Datei mit dem Manifest gespeichert wird. (Überschreibt Assembly.ImageRuntimeVersion.)
Öffentliche EigenschaftIsDynamicRuft einen Wert ab, der angibt, dass die aktuelle Assembly eine dynamische Assembly ist. (Überschreibt Assembly.IsDynamic.)
Öffentliche EigenschaftIsFullyTrustedRuft einen Wert ab, der angibt, ob die aktuelle Assembly mit voller Vertrauenswürdigkeit geladen wird. (Von Assembly geerbt.)
Öffentliche EigenschaftLocationRuft den Speicherort der geladenen Datei, die das Manifest enthält, im CodeBase-Format ab, wenn diese nicht verborgen kopiert wurde (Shadow Copy). (Überschreibt Assembly.Location.)
Öffentliche EigenschaftManifestModuleRuft das Modul im aktuellen AssemblyBuilder ab, das das Assemblymanifest enthält. (Überschreibt Assembly.ManifestModule.)
Öffentliche EigenschaftModulesRuft eine Sammlung ab, die die Module in dieser Assembly enthält. (Von Assembly geerbt.)
Öffentliche EigenschaftPermissionSetRuft den Berechtigungssatz der aktuellen dynamischen Assembly ab. (Überschreibt Assembly.PermissionSet.)
Öffentliche EigenschaftReflectionOnlyRuft einen Wert ab, der angibt, ob sich die dynamische Assembly im ReflectionOnly-Kontext befindet. (Überschreibt Assembly.ReflectionOnly.)
Öffentliche EigenschaftSecurityRuleSetRuft einen Wert ab, der angibt, welchen Satz von Sicherheitsregeln die Common Language Runtime (CLR) für diese Assembly erzwingt. (Überschreibt Assembly.SecurityRuleSet.)
Zum Seitenanfang
  NameBeschreibung
Öffentliche MethodeAddResourceFile(String, String)Fügt dieser Assembly eine vorhandene Ressourcendatei hinzu.
Öffentliche MethodeAddResourceFile(String, String, ResourceAttributes)Fügt dieser Assembly eine vorhandene Ressourcendatei hinzu.
Öffentliche MethodeCreateInstance(String)Sucht den angegebenen Typ aus dieser Assembly unter Berücksichtigung der Groß- und Kleinschreibung und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs. (Von Assembly geerbt.)
Öffentliche MethodeCreateInstance(String, Boolean)Sucht den angegebenen Typ aus dieser Assembly, unter wahlweiser Berücksichtigung der Groß- und Kleinschreibung, und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs. (Von Assembly geerbt.)
Öffentliche MethodeCreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])Sucht den angegebenen Typ aus dieser Assembly und erstellt mithilfe der Systemaktivierung eine Instanz dieses Typs. Hierbei ist die Berücksichtigung der Groß- und Kleinschreibung optional und Kultur, Argumente, Bindungs- und Aktivierungsattribute sind angegeben. (Von Assembly geerbt.)
Öffentliche MethodeStatischer MemberDefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)Definiert eine dynamische Assembly mit dem angegebenen Namen sowie die Zugriffsrechte verfügt.
Öffentliche MethodeStatischer MemberDefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)Definiert eine neue Assembly mit dem angegebenen Namen, die Zugriffsrechte und den angegebenen Attributen.
Öffentliche MethodeDefineDynamicModule(String)Definiert ein benanntes flüchtiges dynamisches Modul in dieser Assembly.
Öffentliche MethodeDefineDynamicModule(String, Boolean)Definiert ein benanntes flüchtiges dynamisches Modul in dieser Assembly und gibt an, ob Symbolinformationen ausgegeben werden sollen.
Öffentliche MethodeDefineDynamicModule(String, String)Definiert ein dauerhaftes dynamisches Modul mit dem angegebenen Namen, das in der angegebenen Datei gespeichert wird. Es werden keine Symbolinformationen ausgegeben.
Öffentliche MethodeDefineDynamicModule(String, String, Boolean)Definiert ein dauerhaftes dynamisches Modul, legt den Modulnamen und den Namen der Datei fest, in der das Modul gespeichert werden soll, und gibt an, ob Symbolinformationen über den Standardsymbolwriter ausgegeben werden sollen.
Öffentliche MethodeDefineResource(String, String, String)Definiert eine eigenständige verwaltete Ressource für diese Assembly mit dem Standardattribut für öffentliche Ressourcen.
Öffentliche MethodeDefineResource(String, String, String, ResourceAttributes)Definiert eine eigenständige verwaltete Ressource für diese Assembly. Für die verwaltete Ressource können Attribute angegeben werden.
Öffentliche MethodeDefineUnmanagedResource(Byte[])Definiert für diese Assembly eine nicht verwaltete Ressource als nicht transparentes BLOB von Bytes.
Öffentliche MethodeDefineUnmanagedResource(String)Definiert eine Datei einer nicht verwalteten Ressource dieser Assembly mit dem Namen der Ressourcendatei.
Öffentliche MethodeDefineVersionInfoResource()Definiert eine nicht verwaltete Versionsinformationsressource mit den Informationen, die im AssemblyName-Objekt der Assembly und in den benutzerdefinierten Attributen der Assembly angegeben sind.
Öffentliche MethodeDefineVersionInfoResource(String, String, String, String, String)Definiert für diese Assembly mit den angegebenen Spezifikationen eine nicht verwaltete Versionsinformationsressource.
Öffentliche MethodeEqualsGibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Überschreibt Assembly.Equals(Object).)
Öffentliche MethodeGetCustomAttributes(Boolean)Gibt alle benutzerdefinierten Attribute zurück, die auf den aktuellen AssemblyBuilder angewendet wurden. (Überschreibt Assembly.GetCustomAttributes(Boolean).)
Öffentliche MethodeGetCustomAttributes(Type, Boolean)Gibt alle benutzerdefinierten Attribute zurück, die auf den aktuellen AssemblyBuilder angewendet wurden und die von einem angegebenen Attributtyp abgeleitet sind. (Überschreibt Assembly.GetCustomAttributes(Type, Boolean).)
Öffentliche MethodeGetCustomAttributesDataGibt CustomAttributeData-Objekte mit Informationen zu den Attributen zurück, die auf den aktuellen AssemblyBuilder angewendet wurden. (Überschreibt Assembly.GetCustomAttributesData().)
Öffentliche MethodeGetDynamicModuleGibt das dynamische Modul mit dem angegebenen Namen zurück.
Öffentliche MethodeGetExportedTypesRuft die exportierten Typen ab, die in dieser Assembly definiert sind. (Überschreibt Assembly.GetExportedTypes().)
Öffentliche MethodeGetFileRuft einen FileStream für die angegebene Datei in der Dateitabelle des Manifests dieser Assembly ab. (Überschreibt Assembly.GetFile(String).)
Öffentliche MethodeGetFiles()Ruft die Dateien in der Dateitabelle eines Assemblymanifests ab. (Von Assembly geerbt.)
Öffentliche MethodeGetFiles(Boolean)Ruft die Dateien in der Dateitabelle eines Assemblymanifests ab und gibt an, ob Ressourcenmodule eingebunden werden sollen. (Überschreibt Assembly.GetFiles(Boolean).)
Öffentliche MethodeGetHashCodeGibt den Hashcode für diese Instanz zurück. (Überschreibt Assembly.GetHashCode().)
Öffentliche MethodeGetLoadedModules()Ruft alle geladenen Module ab, die Bestandteil dieser Assembly sind. (Von Assembly geerbt.)
Öffentliche MethodeGetLoadedModules(Boolean)Gibt alle geladenen Module zurück, die Teil dieser Assembly sind. Optional werden Ressourcenmodule eingeschlossen. (Überschreibt Assembly.GetLoadedModules(Boolean).)
Öffentliche MethodeGetManifestResourceInfoGibt Informationen darüber zurück, wie die angegebene Ressource beibehalten wurde. (Überschreibt Assembly.GetManifestResourceInfo(String).)
Öffentliche MethodeGetManifestResourceNamesLädt die angegebene Manifestressource aus dieser Assembly. (Überschreibt Assembly.GetManifestResourceNames().)
Öffentliche MethodeGetManifestResourceStream(String)Lädt die angegebene Manifestressource aus dieser Assembly. (Überschreibt Assembly.GetManifestResourceStream(String).)
Öffentliche MethodeGetManifestResourceStream(Type, String)Lädt die angegebene Manifestressource, deren Gültigkeitsbereich durch den Namespace des angegebenen Typs festgelegt ist, aus dieser Assembly. (Überschreibt Assembly.GetManifestResourceStream(Type, String).)
Öffentliche MethodeGetModuleRuft das angegebene Modul in dieser Assembly ab. (Überschreibt Assembly.GetModule(String).)
Öffentliche MethodeGetModules()Ruft alle Module ab, die Bestandteil dieser Assembly sind. (Von Assembly geerbt.)
Öffentliche MethodeGetModules(Boolean)Ruft alle Module ab, die Teil dieser Assembly sind. Optional werden Ressourcenmodule eingeschlossen. (Überschreibt Assembly.GetModules(Boolean).)
Öffentliche MethodeGetName()Ruft einen AssemblyName für diese Assembly ab. (Von Assembly geerbt.)
Öffentliche MethodeGetName(Boolean)Ruft den AssemblyName ab, der beim Erstellen der aktuellen dynamischen Assembly angegeben wurde, und legt die entsprechende CodeBase fest. (Überschreibt Assembly.GetName(Boolean).)
Öffentliche MethodeGetObjectDataRuft Serialisierungsinformationen mit allen Daten ab, die für das erneute Instanziieren dieser Assembly benötigt werden. (Von Assembly geerbt.)
Öffentliche MethodeGetReferencedAssembliesRuft eine unvollständige Liste von AssemblyName-Objekten für die Assemblys ab, auf die von diesem AssemblyBuilder verwiesen wird. (Überschreibt Assembly.GetReferencedAssemblies().)
Öffentliche MethodeGetSatelliteAssembly(CultureInfo)Ruft die Satellitenassembly für die angegebene Kultur ab. (Überschreibt Assembly.GetSatelliteAssembly(CultureInfo).)
Öffentliche MethodeGetSatelliteAssembly(CultureInfo, Version)Ruft die angegebene Version der Satellitenassembly für die angegebene Kultur ab. (Überschreibt Assembly.GetSatelliteAssembly(CultureInfo, Version).)
Öffentliche MethodeGetType()Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeGetType(String)Ruft das Type-Objekt mit dem angegebenen Namen aus der Assemblyinstanz ab. (Von Assembly geerbt.)
Öffentliche MethodeGetType(String, Boolean)Ruft das Type-Objekt mit dem angegebenen Namen in der Assemblyinstanz ab und löst optional eine Ausnahme aus, wenn der Typ nicht gefunden wurde. (Von Assembly geerbt.)
Öffentliche MethodeGetType(String, Boolean, Boolean)Ruft den angegebenen Typ aus den Typen ab, die im aktuellen AssemblyBuilder definiert und erstellt wurden. (Überschreibt Assembly.GetType(String, Boolean, Boolean).)
Öffentliche MethodeGetTypesRuft die in dieser Assembly definierten Typen ab. (Von Assembly geerbt.)
Öffentliche MethodeIsDefinedGibt einen Wert zurück, der angibt, ob eine oder mehrere Instanzen des angegebenen Attributtyps auf diesen Member angewendet wird. (Überschreibt Assembly.IsDefined(Type, Boolean).)
Öffentliche MethodeLoadModule(String, Byte[])Lädt das Modul, das für diese Assembly intern ist, mit einem COFF (Common Object File Format)-Image, das ein ausgegebenes Modul enthält, oder eine Ressourcendatei. (Von Assembly geerbt.)
Öffentliche MethodeLoadModule(String, Byte[], Byte[])Lädt das Modul, das für diese Assembly intern ist, mit einem COFF (Common Object File Format)-Image, das ein ausgegebenes Modul enthält, oder eine Ressourcendatei. Die Rohdatenbytes, die die Symbole für das Modul darstellen, werden ebenfalls geladen. (Von Assembly geerbt.)
Öffentliche MethodeSave(String)Speichert diese dynamische Assembly auf dem Datenträger.
Öffentliche MethodeSave(String, PortableExecutableKinds, ImageFileMachine)Speichert diese dynamische Assembly auf dem Datenträger unter Angabe der in den ausführbaren Dateien der Assembly enthaltenen Art des Codes und der Zielplattform.
Öffentliche MethodeSetCustomAttribute(CustomAttributeBuilder)Legt für diese Assembly ein benutzerdefiniertes Attribut mit einem Generator für benutzerdefinierte Attribute fest.
Öffentliche MethodeSetCustomAttribute(ConstructorInfo, Byte[])Legen Sie für diese Assembly ein benutzerdefiniertes Attribut mithilfe eines angegebenen BLOBs für benutzerdefinierte Attribute fest.
Öffentliche MethodeSetEntryPoint(MethodInfo)Legt den Einstiegspunkt für diese dynamische Assembly in der Annahme fest, dass gerade eine Konsolenanwendung erstellt wird.
Öffentliche MethodeSetEntryPoint(MethodInfo, PEFileKinds)Legt den Einstiegspunkt für diese Assembly fest und definiert den Typ der erstellten PE-Datei (Portable Executable, übertragbare ausführbare Datei).
Öffentliche MethodeToStringGibt den vollständigen Namen der Assembly zurück, der auch als Anzeigename bezeichnet wird. (Von Assembly geerbt.)
Zum Seitenanfang
  NameBeschreibung
Öffentliches EreignisModuleResolveTritt ein, wenn das Klassenladeprogramm der Common Language Runtime einen Verweis auf ein internes Modul einer Assembly nicht auf normale Weise auflösen kann. (Von Assembly geerbt.)
Zum Seitenanfang
  NameBeschreibung
Öffentliche ErweiterungsmethodeGetCustomAttribute(Type)Überladen. Ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, der für eine angegebene Assembly angewendet wird. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttribute<T>()Überladen. Ruft ein benutzerdefiniertes Attribut eines angegebenen Typs ab, der für eine angegebene Assembly angewendet wird. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes()Überladen. Ruft eine Auflistung benutzerdefinierter Attribute ab, die für eine angegebene Assembly angewendet werden. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes(Type)Überladen. Ruft eine Auflistung benutzerdefinierter Attribute eines angegebenen Typs ab, die für eine angegebene Assembly angewendet werden. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeGetCustomAttributes<T>()Überladen. Ruft eine Auflistung benutzerdefinierter Attribute eines angegebenen Typs ab, die für eine angegebene Assembly angewendet werden. (Durch CustomAttributeExtensions definiert.)
Öffentliche ErweiterungsmethodeIsDefinedGibt an, ob irgend welche benutzerdefinierten Attribute eines bestimmten Typs auf eine angegebene Assembly angewendet werden. (Durch CustomAttributeExtensions definiert.)
Zum Seitenanfang
  NameBeschreibung
Explizite SchnittstellenimplementierungPrivate Methode_Assembly.GetTypeGibt den Typ der aktuellen Instanz zurück. (Von Assembly geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode_AssemblyBuilder.GetIDsOfNamesOrdnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.
Explizite SchnittstellenimplementierungPrivate Methode_AssemblyBuilder.GetTypeInfoRuft die Typinformationen für ein Objekt ab, die dann zum Abrufen der Typinformationen für eine Schnittstelle verwendet werden können.
Explizite SchnittstellenimplementierungPrivate Methode_AssemblyBuilder.GetTypeInfoCountRuft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).
Explizite SchnittstellenimplementierungPrivate Methode_AssemblyBuilder.InvokeStellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.
Zum Seitenanfang

Eine dynamische Assembly ist eine Assembly, die mithilfe von Emit-APIs für die Reflektion erstellt wurde. Die dynamischen Module in der Assembly werden gespeichert, wenn die dynamische Assembly unter Verwendung der Save-Methode gespeichert wird. Zum Generieren einer ausführbaren Datei muss die SetEntryPoint-Methode aufgerufen werden, um die Methode zu bestimmen, die der Einstiegspunkt für die Assembly ist. Assemblys werden in der Standardeinstellung als DLL gespeichert, es sei denn, SetEntryPoint erfordert die Generierung einer Konsolenanwendung oder einer Windows-basierten Anwendung.

Wenn eine dynamische Assembly mehrere dynamische Module enthält, muss der Dateiname des Assemblymanifests dem Modulnamen entsprechen, der als erstes Argument für DefineDynamicModule angegeben ist.

Einige Methoden für die Assembly der Basisklasse (z. B. GetModules und GetLoadedModules) funktionieren nicht ordnungsgemäß, wenn sie über AssemblyBuilder-Objekte aufgerufen werden. Sie können die definierte dynamische Assembly laden und die Methoden für die geladene Assembly aufrufen. Wenn Sie z. B. sicherstellen möchten, dass Ressourcenmodule in der zurückgegebenen Liste der Module enthalten sind, rufen Sie GetModules für das geladene Assembly-Objekt auf.

Das Signieren einer dynamischen Assembly mit KeyPair wird erst dann wirksam, wenn die Assembly auf einem Datenträger gespeichert wurde. Starke Namen können somit nicht mit flüchtigen dynamischen Assemblys verwendet werden.

Verwenden Sie zum Abrufen eines AssemblyBuilder-Objekts die AppDomain.DefineDynamicAssembly-Methode.

HinweisHinweis

Das auf diesen Typ oder Member angewendete HostProtectionAttribute-Attribut besitzt den folgenden Resources-Eigenschaftswert: MayLeakOnAbort. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder einer URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.

Im folgenden Codebeispiel wird veranschaulicht, wie eine dynamische Assembly mit einem Modul definiert wird. Das Modul in der Beispielassembly enthält einen Typ (MyDynamicType), der über ein privates Feld verfügt, eine Eigenschaft, die das private Feld abruft und festlegt, Konstruktoren, die das private Feld initialisieren, sowie eine Methode, die eine vom Benutzer angegebene Zahl mit dem Wert des privaten Felds multipliziert und das Ergebnis zurückgibt.

AssemblyBuilderAccess.RunAndSave wird beim Erstellen der Assembly angegeben. Der Assemblycode wird sofort verwendet. Zudem wird die Assembly auf dem Datenträger gespeichert, sodass sie mit Ildasm.exe (MSIL Disassembler-Tool) überprüft oder in einem anderen Programm verwendet werden kann.


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

class DemoAssemblyBuilder
{
    public static void Main()
    {
        // An assembly consists of one or more modules, each of which
        // contains zero or more types. This code creates a single-module
        // assembly, the most common case. The module contains one type,
        // named "MyDynamicType", that has a private field, a property 
        // that gets and sets the private field, constructors that 
        // initialize the private field, and a method that multiplies 
        // a user-supplied number by the private field value and returns
        // the result. In C# the type might look like this:
        /*
        public class MyDynamicType
        {
            private int m_number;

            public MyDynamicType() : this(42) {}
            public MyDynamicType(int initNumber)
            {
                m_number = initNumber;
            }

            public int Number
            {
                get { return m_number; }
                set { m_number = value; }
            }

            public int MyMethod(int multiplier)
            {
                return m_number * multiplier;
            }
        }
        */

        AssemblyName aName = new AssemblyName("DynamicAssemblyExample");
        AssemblyBuilder ab = 
            AppDomain.CurrentDomain.DefineDynamicAssembly(
                aName, 
                AssemblyBuilderAccess.RunAndSave);

        // For a single-module assembly, the module name is usually
        // the assembly name plus an extension.
        ModuleBuilder mb = 
            ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");

        TypeBuilder tb = mb.DefineType(
            "MyDynamicType", 
             TypeAttributes.Public);

        // Add a private field of type int (Int32).
        FieldBuilder fbNumber = tb.DefineField(
            "m_number", 
            typeof(int), 
            FieldAttributes.Private);

        // Define a constructor that takes an integer argument and 
        // stores it in the private field. 
        Type[] parameterTypes = { typeof(int) };
        ConstructorBuilder ctor1 = tb.DefineConstructor(
            MethodAttributes.Public, 
            CallingConventions.Standard, 
            parameterTypes);

        ILGenerator ctor1IL = ctor1.GetILGenerator();
        // For a constructor, argument zero is a reference to the new
        // instance. Push it on the stack before calling the base
        // class constructor. Specify the default constructor of the 
        // base class (System.Object) by passing an empty array of 
        // types (Type.EmptyTypes) to GetConstructor.
        ctor1IL.Emit(OpCodes.Ldarg_0);
        ctor1IL.Emit(OpCodes.Call, 
            typeof(object).GetConstructor(Type.EmptyTypes));
        // Push the instance on the stack before pushing the argument
        // that is to be assigned to the private field m_number.
        ctor1IL.Emit(OpCodes.Ldarg_0);
        ctor1IL.Emit(OpCodes.Ldarg_1);
        ctor1IL.Emit(OpCodes.Stfld, fbNumber);
        ctor1IL.Emit(OpCodes.Ret);

        // Define a default constructor that supplies a default value
        // for the private field. For parameter types, pass the empty
        // array of types or pass null.
        ConstructorBuilder ctor0 = tb.DefineConstructor(
            MethodAttributes.Public, 
            CallingConventions.Standard, 
            Type.EmptyTypes);

        ILGenerator ctor0IL = ctor0.GetILGenerator();
        // For a constructor, argument zero is a reference to the new
        // instance. Push it on the stack before pushing the default
        // value on the stack, then call constructor ctor1.
        ctor0IL.Emit(OpCodes.Ldarg_0);
        ctor0IL.Emit(OpCodes.Ldc_I4_S, 42);
        ctor0IL.Emit(OpCodes.Call, ctor1);
        ctor0IL.Emit(OpCodes.Ret);

        // Define a property named Number that gets and sets the private 
        // field.
        //
        // The last argument of DefineProperty is null, because the
        // property has no parameters. (If you don't specify null, you must
        // specify an array of Type objects. For a parameterless property,
        // use the built-in array with no elements: Type.EmptyTypes)
        PropertyBuilder pbNumber = tb.DefineProperty(
            "Number", 
            PropertyAttributes.HasDefault, 
            typeof(int), 
            null);

        // The property "set" and property "get" methods require a special
        // set of attributes.
        MethodAttributes getSetAttr = MethodAttributes.Public | 
            MethodAttributes.SpecialName | MethodAttributes.HideBySig;

        // Define the "get" accessor method for Number. The method returns
        // an integer and has no arguments. (Note that null could be 
        // used instead of Types.EmptyTypes)
        MethodBuilder mbNumberGetAccessor = tb.DefineMethod(
            "get_Number", 
            getSetAttr, 
            typeof(int), 
            Type.EmptyTypes);

        ILGenerator numberGetIL = mbNumberGetAccessor.GetILGenerator();
        // For an instance property, argument zero is the instance. Load the 
        // instance, then load the private field and return, leaving the
        // field value on the stack.
        numberGetIL.Emit(OpCodes.Ldarg_0);
        numberGetIL.Emit(OpCodes.Ldfld, fbNumber);
        numberGetIL.Emit(OpCodes.Ret);

        // Define the "set" accessor method for Number, which has no return
        // type and takes one argument of type int (Int32).
        MethodBuilder mbNumberSetAccessor = tb.DefineMethod(
            "set_Number", 
            getSetAttr, 
            null, 
            new Type[] { typeof(int) });

        ILGenerator numberSetIL = mbNumberSetAccessor.GetILGenerator();
        // Load the instance and then the numeric argument, then store the
        // argument in the field.
        numberSetIL.Emit(OpCodes.Ldarg_0);
        numberSetIL.Emit(OpCodes.Ldarg_1);
        numberSetIL.Emit(OpCodes.Stfld, fbNumber);
        numberSetIL.Emit(OpCodes.Ret);

        // Last, map the "get" and "set" accessor methods to the 
        // PropertyBuilder. The property is now complete. 
        pbNumber.SetGetMethod(mbNumberGetAccessor);
        pbNumber.SetSetMethod(mbNumberSetAccessor);

        // Define a method that accepts an integer argument and returns
        // the product of that integer and the private field m_number. This
        // time, the array of parameter types is created on the fly.
        MethodBuilder meth = tb.DefineMethod(
            "MyMethod", 
            MethodAttributes.Public, 
            typeof(int), 
            new Type[] { typeof(int) });

        ILGenerator methIL = meth.GetILGenerator();
        // To retrieve the private instance field, load the instance it
        // belongs to (argument zero). After loading the field, load the 
        // argument one and then multiply. Return from the method with 
        // the return value (the product of the two numbers) on the 
        // execution stack.
        methIL.Emit(OpCodes.Ldarg_0);
        methIL.Emit(OpCodes.Ldfld, fbNumber);
        methIL.Emit(OpCodes.Ldarg_1);
        methIL.Emit(OpCodes.Mul);
        methIL.Emit(OpCodes.Ret);

        // Finish the type.
        Type t = tb.CreateType();

        // The following line saves the single-module assembly. This
        // requires AssemblyBuilderAccess to include Save. You can now
        // type "ildasm MyDynamicAsm.dll" at the command prompt, and 
        // examine the assembly. You can also write a program that has
        // a reference to the assembly, and use the MyDynamicType type.
        // 
        ab.Save(aName.Name + ".dll");

        // Because AssemblyBuilderAccess includes Run, the code can be
        // executed immediately. Start by getting reflection objects for
        // the method and the property.
        MethodInfo mi = t.GetMethod("MyMethod");
        PropertyInfo pi = t.GetProperty("Number");

        // Create an instance of MyDynamicType using the default 
        // constructor. 
        object o1 = Activator.CreateInstance(t);

        // Display the value of the property, then change it to 127 and 
        // display it again. Use null to indicate that the property
        // has no index.
        Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, null));
        pi.SetValue(o1, 127, null);
        Console.WriteLine("o1.Number: {0}", pi.GetValue(o1, null));

        // Call MyMethod, passing 22, and display the return value, 22
        // times 127. Arguments must be passed as an array, even when
        // there is only one.
        object[] arguments = { 22 };
        Console.WriteLine("o1.MyMethod(22): {0}", 
            mi.Invoke(o1, arguments));

        // Create an instance of MyDynamicType using the constructor
        // that specifies m_Number. The constructor is identified by
        // matching the types in the argument array. In this case, 
        // the argument array is created on the fly. Display the 
        // property value.
        object o2 = Activator.CreateInstance(t, 
            new object[] { 5280 });
        Console.WriteLine("o2.Number: {0}", pi.GetValue(o2, null));
    }
}

/* This code produces the following output:

o1.Number: 42
o1.Number: 127
o1.MyMethod(22): 2794
o2.Number: 5280
 */


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

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.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.