Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Attribute und Reflection
lex
myCSharp.de - Member



Dabei seit:
Beiträge: 113
Herkunft: Niedersachsen

Themenstarter:

Attribute und Reflection

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

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!”
private Nachricht | Beiträge des Benutzers
lex
myCSharp.de - Member



Dabei seit:
Beiträge: 113
Herkunft: Niedersachsen

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers