Schneller Zugriff auf den Typ / method / ..., der ein Attribut in C # enthält

8

Ich habe ein benutzerdefiniertes Attribut mit dem Namen AAtribute erstellt, zum Beispiel eine Klasse namens B, in der eine oder mehrere Methoden das Attribut verwenden. Ist es möglich, die MethodInfo der Methode, die das Attribut (in diesem Fall BMethod1) enthält, als Attribut zu erhalten, ohne die gesamte Assembly durchzugehen und alle definierten Methoden für ihre Attribute zu betrachten? Und ist das eine analoge Art für andere AttributeTargets (Parameter / Typen / Eigenschaften / ...)? Ich möchte kein Array aller Methoden, die diesen Attributtyp verwenden, sondern nur die Methode mit diesem Attirbute-Objekt. Ich möchte es verwenden, um zusätzliche Einschränkungen für die Methode (Rückgabetyp, Parameter, Name, andere Attribut-Verwendung, ...).

%Vor%     
Willem Van Onsem 28.08.2009, 09:49
quelle

3 Antworten

2

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie innerhalb des Attributcodes das Objekt (in diesem Fall eine Methode) erhalten, auf das das Attribut angewendet wird.
Ich bin mir ziemlich sicher, dass es keinen direkten Weg dafür gibt - das Attribut hat keine Kenntnis von dem Objekt, an das es angehängt ist, diese Zuordnung ist umgekehrt.

Das Beste, was ich Ihnen vorschlagen kann, ist ein Workaround wie der folgende:

%Vor%

HINWEIS
Was möchten Sie erreichen, indem Sie auf die MethodInfo im Konstruktor des Attributs zugreifen? Vielleicht gibt es einen alternativen Weg, um Ihr Ziel zu erreichen ...

BEARBEITEN

Als eine weitere mögliche Lösung können Sie eine statische Methode in Ihrem Attribut angeben, die die Überprüfung durchführt - dies beinhaltet jedoch die Iteration über die MethodInfos.

%Vor%     
Paolo Tedesco 28.08.2009, 10:19
quelle
2

Ich denke, die Antwort ist nein. Oder zumindest nicht in einer vernünftigen Art und Weise. Die Instanz des Attributs wird nur erstellt, wenn Sie nach dem Attribut über MethodInfo suchen. Durch das Instanziieren der Klasse mit der Methode, die über das Attribut verfügt, wird das Attribut nicht instanziiert. Attribut-Instanzen werden nur erstellt, sobald Sie herumstochern, um sie durch Reflexion zu finden.

    
Mike Two 28.08.2009 10:37
quelle
0

Um herauszufinden, ob einer Methode ein Attribut zugewiesen wurde, haben Sie bereits die MethodInfo.

%Vor%     
nexus says 28.08.2009 10:02
quelle