Benutzer mit den meisten Antworten
Attribute entwickeln

Frage
-
Hallo,
ich habe ein eigenes Attribute entwickelt und wollte fragen wie ich in Erfahrung bringen kann welche Klasse oder Funktion dieses Attribut nutzt.
[MeinAttribute]
void testvoid() {}
So nutze ich diesen.
mfg flo
Die Taschenlampe - Die Erleuchtung für ihr Windows Phone! ------------- Sie wollen selbst APP-Programmierer werden? Kommen Sie auf www.flogersoft.de -> Tutorials und erstellen Sie ihre erste, eigene APP!
Antworten
-
Hallo,
an die Attribute einer Methode (oder eines anderes Typs) kommst du per Reflection heran:var method = typeof(TestClass).GetMethod("testvoid", BindingFlags.NonPublic | BindingFlags.Instance);//Methode abrufen //var attribs = method.GetCustomAttributes(typeof(MeinAttribute));//Attribute deines Typs abrufen var attribs = method.GetCustomAttributes();//alle attribute abrufen foreach (object attrib in attribs)//Alle Attribute durchgehen { if (attrib is MeinAttribute)//Abfrage ist nur nötig, wenn du keinen Typ bei der Abfrage spezifiziert hast - siehe auskommentierte Zeile vor foreach Console.WriteLine("PositionalString = " + (attrib as MeinAttribute).PositionalString);//Rufe eine Eigenschaft des Attributes ab else Console.WriteLine(attrib.GetType().FullName);//Unbekanntes Attribut, Typ ausgeben }
Beim abfragen des Typs musst du die BindingFlags ggf. anpassen. Momentan wird nach nicht öffentlichen (private, protected oder internal) Methoden gesucht, die nicht statisch, d.h. Instanzmember sind. Die auskommentierte Zeile zum abfragen der Attribute fragt nur die Attribute eines Bestimmten Typs ab. Die Zeile darunter alle Attribute jeden Typs.Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Stefan FalzModerator Montag, 21. April 2014 09:08
- Als Antwort markiert Ciprian Bogdan Freitag, 2. Mai 2014 09:52
-
Hallo Flo,
das Thema Reflection ist doch "ein wenig" zu groß, um das hier behandeln zu können. Die Grundlagen hierfür musst Du dir einfach per Selbststudium (MSDN, ...) aneignen. Bei spezifischen Problemen sind wir natürlich gerne für dich da.
Einen Einstieg in Reflection findest Du bspw. hier:
http://msdn.microsoft.com/de-de/library/f7ykdhsy.aspx
Um die Klassen einer Assembly auszulesen, schau bitte hier:
http://msdn.microsoft.com/de-de/library/system.reflection.assembly.aspx
Um die Methoden einer Klasse auszulesen, dann mal hier:
http://msdn.microsoft.com/de-de/library/4d848zkb.aspx
---
Ich frage mich allerdings, was Du mit "Das Programm soll diese selbst suchen" bezwecken willst. Verrate uns doch ein wenig mehr über deine genauen Anforderungen, evtl. findet sich dann eine bessere Lösung für deine Zwecke.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 21. April 2014 09:09
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 23. April 2014 14:49
- Als Antwort markiert Ciprian Bogdan Freitag, 2. Mai 2014 09:53
Alle Antworten
-
Hallo,
an die Attribute einer Methode (oder eines anderes Typs) kommst du per Reflection heran:var method = typeof(TestClass).GetMethod("testvoid", BindingFlags.NonPublic | BindingFlags.Instance);//Methode abrufen //var attribs = method.GetCustomAttributes(typeof(MeinAttribute));//Attribute deines Typs abrufen var attribs = method.GetCustomAttributes();//alle attribute abrufen foreach (object attrib in attribs)//Alle Attribute durchgehen { if (attrib is MeinAttribute)//Abfrage ist nur nötig, wenn du keinen Typ bei der Abfrage spezifiziert hast - siehe auskommentierte Zeile vor foreach Console.WriteLine("PositionalString = " + (attrib as MeinAttribute).PositionalString);//Rufe eine Eigenschaft des Attributes ab else Console.WriteLine(attrib.GetType().FullName);//Unbekanntes Attribut, Typ ausgeben }
Beim abfragen des Typs musst du die BindingFlags ggf. anpassen. Momentan wird nach nicht öffentlichen (private, protected oder internal) Methoden gesucht, die nicht statisch, d.h. Instanzmember sind. Die auskommentierte Zeile zum abfragen der Attribute fragt nur die Attribute eines Bestimmten Typs ab. Die Zeile darunter alle Attribute jeden Typs.Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Stefan FalzModerator Montag, 21. April 2014 09:08
- Als Antwort markiert Ciprian Bogdan Freitag, 2. Mai 2014 09:52
-
Hallo und Frohe Ostern!
Super, dankeschön! Jetzt wäre noch inteteressant wie ich alle Klassen und die jeweils darin enthaltenen Methoden abfragen kann. Ich möchte Sie quasi nicht vorher bekannt geben müssen. Das Programm soll diese selbst suchen!
Hättest du da noch ne lösung?
MfG Flo
Die Taschenlampe - Die Erleuchtung für ihr Windows Phone! ------------- Sie wollen selbst APP-Programmierer werden? Kommen Sie auf www.flogersoft.de -> Tutorials und erstellen Sie ihre erste, eigene APP!
-
Hallo Flo,
das Thema Reflection ist doch "ein wenig" zu groß, um das hier behandeln zu können. Die Grundlagen hierfür musst Du dir einfach per Selbststudium (MSDN, ...) aneignen. Bei spezifischen Problemen sind wir natürlich gerne für dich da.
Einen Einstieg in Reflection findest Du bspw. hier:
http://msdn.microsoft.com/de-de/library/f7ykdhsy.aspx
Um die Klassen einer Assembly auszulesen, schau bitte hier:
http://msdn.microsoft.com/de-de/library/system.reflection.assembly.aspx
Um die Methoden einer Klasse auszulesen, dann mal hier:
http://msdn.microsoft.com/de-de/library/4d848zkb.aspx
---
Ich frage mich allerdings, was Du mit "Das Programm soll diese selbst suchen" bezwecken willst. Verrate uns doch ein wenig mehr über deine genauen Anforderungen, evtl. findet sich dann eine bessere Lösung für deine Zwecke.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Montag, 21. April 2014 09:09
- Als Antwort vorgeschlagen Stefan FalzModerator Mittwoch, 23. April 2014 14:49
- Als Antwort markiert Ciprian Bogdan Freitag, 2. Mai 2014 09:53
-
Hallo,
ich lade mir nun alle Assemblys, dann die darin enthaltenen Typen, dann die Methoden. Anschließend prüfe ich ob eines davon (mehrere) mein Attribut nutzen. Klappt wunderbar!
Ich habe vor langem ein kleines "Security"-Framework geschrieben. Dieses ist eine Schnittstelle. Und sobald sich der Nutzerlevel (Admin, Hauptnutzer, Gast) ändert, wird eine vom Interface vorgegebene Methode aufgerufen welche dann z.B. bestimmte Buttons aktiviert, oder deaktiviert.
Nun möchte ich dies über Attribute machen. Jede Methode die dieses Attribute hat wird bei einer Änderung selbstständig vom Framework ausgeführt, und der entsprechende Button (oder anderes Control) wird von der Methode selbst gesperrt, versteckt etc.
Einen Schritt mehr automatismus + Flexibilität!
MfG Flo
Die Taschenlampe - Die Erleuchtung für ihr Windows Phone! ------------- Sie wollen selbst APP-Programmierer werden? Kommen Sie auf www.flogersoft.de -> Tutorials und erstellen Sie ihre erste, eigene APP!
-
Hi,
Ist Deine Situation eigentlich abgeklärt ? Können wir den Thread schließen ? Wenn ja - bitte markiere die hilfreichen Beiträge "als Antwort".
Viele Grüße,
Ciprian
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.