reflection



  • Hallo Forum!

    Eine Frage: Ist es möglich in c# per Assembly bzw- Reflection einer Dynamisch erzeugten Methode ein Attribut zu zuordnen?

    Mit diesem Code erstelle ich einen neuen Typen, also wenn ich GenerateType mit "meineKlasse" instanziere, wird ein Type "meineKlasse" zurückgegeben.

    public class GenerateType
        {
            Type type;
            public Type MyType
            {
                get
                {
                    return this.type;
                }
            }
            public GenerateType(string name)
            {
                // Abrufen der aktuellen Anwendungsdomäne
                AppDomain dom = AppDomain.CurrentDomain;
                // Erstellen einer neuen Assembly
                AssemblyName assembly = new AssemblyName();
                assembly.Name = "TempAssembly";
                AssemblyBuilder assBuilder =
                                dom.DefineDynamicAssembly(assembly,
                                AssemblyBuilderAccess.Run);
                // Erzeugen eines Moduls in der Assembly
                ModuleBuilder modBuilder =
                          assBuilder.DefineDynamicModule("NewModule");
                // Erzeugen eines Typen im Modul
                TypeBuilder tBuilder =
                                modBuilder.DefineType("DynamicClass",
                                TypeAttributes.Public);
                // Dem neuen Typ eine Methode hinzufügen
                MethodBuilder mBuilder =
                                tBuilder.DefineMethod("MyDynamicMethod",
                                MethodAttributes.Public, null, null);
                // Erzeugen des IL-Codes
                ILGenerator ilGen = mBuilder.GetILGenerator();
                ilGen.EmitWriteLine("In der dynamischen Methode.");
                ilGen.Emit(OpCodes.Ret);
                // Type festlegen
                type = tBuilder.CreateType();
            }
        }
    

    Dann erzeuge ich meine neue dynamische Klasse

    class Program {
      static void Main(string[] args) {
        GenerateType gen = new GenerateType();
        Type type = gen.MyType;
        // Erstellen des neuen Typs
        object obj = Activator.CreateInstance(type);
        // die neue Methode referenzieren
        MethodInfo dynMethod = type.GetMethod("MyDynamicMethod");
        // Aufruf der dynamisch erzeugten Methode
        dynMethod.Invoke(obj, null);
        Console.ReadLine();
      }
    }
    

    Es ist möglich eine dynamische Klasse zu erzeugen und eine dynmaische Methode auch. Trotz langer Suche habe ich kein Beispiel gefunden, wie ich ein Attribut dynamisch erzeuge. Bin für jeden Tipp dankbar

    Gruß



  • Hallo,

    ich vereinfache nochmal meine Frage:
    -ist es prinzipiell möglich einer dynamisch erzeugten klasse beleibig viele attribute zuzuordnen?
    -wenn ja wie? wonach soll ich suchen : reflection , assembly , properties?

    Sorry für den doppelpost aber ich komme echt nicht weiter..

    Gruß



  • Evtl. hilft dir ja die Klasse "CustomAttributeBuilder" weiter?



  • Schau die mal MethodBuilder.SetCustomAttribute(...) in der MSDN an.




Anmelden zum Antworten