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% 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%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.
Um herauszufinden, ob einer Methode ein Attribut zugewiesen wurde, haben Sie bereits die MethodInfo.
%Vor%Tags und Links c# attributes system.reflection methodinfo