Laden...

Attribute und Reflection

Erstellt von lex vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.404 Views
L
lex Themenstarter:in
113 Beiträge seit 2004
vor 17 Jahren
Attribute und Reflection

Moin,

habe das so ein kleines ,für mich momentan ein etwas größeres🙂 , Problem.
Habe mir zwei benutzerdefinierte Attribute erstellt und möchte diese nun auch gerne Nutzen. Das eine Attribute ist für KLassen, das andere für Methoden.

Ich möchte nun gerne eine biliebige DLL durchlaufen, was auch klappt, und hier möchte ich un Prüfen welche KLassen das Erste Attribute unterstützen und mir die Klassen in einer Liste ausgeben lassen. Als zweiten Schritt möchte ich ganz gerne die Gefundenen Klasse durchlaufen und überfprüfen ob es Methoden gibt die das 2 Attribut unterstützen und diese dann Aufrufen.

und bei den Rückgabewerten, sprich ausgabe der Klassen bzw aufruf der methoden hapert es. Kann mir jmd mal einen ansatz liefern auf dem man aufbauen kann 🙂 ?

mfg

lex

PS: Und ja, ich habe bereits den Artikel gelesen der über Attribute geht! Mit viel beim Titel nichts besseres ein.

4.506 Beiträge seit 2004
vor 17 Jahren

Hallo lex,

also ich würde das mit ineindander geschachtelten Foreach Schleifen lösen:



// Assembly zuweisen
Assembly myAssi = Assembly.LoadFrom("myassembly.dll");

// Alle klassen aus dieser assembly filtern
foreach (Type currTypeInAssi in myAssi.GetTypes())
{
   // ist das eine Klasse?
   if (currTypeInAssi.IsClass)
   {
      // hat sie das Attribut?
      object[] oTestAttributes = currTypeInAssi.GetCustomAttributes(typeof(myOwnClassAttribute), true);
      if (oTestAttributes.Length > 0)
      {
         foreach (MethodInfo currMethodInClass in currTypeInAssi.GetMethods())
         {
            // hat sie das Attribut?
            object[] oTestAttributes = currMethodInClass.GetCustomAttributes(typeof(myOwnMethodAttribute), true);
            if (oTestAttributes.Length > 0)
            {
               // tue was auch immer Du möchtest nun
            }
         }
      }
   }
}

Dieser Code ist hier im Editor entstanden, und ohne Gewähr. Außerdem lässt er sich sicherlich noch besser strukturieren. Aber so siehst du die Vorgehensweise hierzu.

Hoffe das hilft Dir weiter?

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

L
lex Themenstarter:in
113 Beiträge seit 2004
vor 17 Jahren

Für das bessere Verständnis war das Beispiel sehr gut ... danke für die Kommentare 🙂.

Das durchlaufen der dll und das Auflisten aller Klassen ist kein Problem. Nur dann das unterscheiden bei der Anzeige ob eine Klasse ein bestimmtes Attribut implementiert macht noch sachwierigkeiten ... aber ich denke anhand deines Beispiels wird das schon klappen ... wenn nicht melde ich mich bestimmt noch mal 🙂