Verwenden Sie vielleicht ein dynamisches Muster? Sie können jede Methode / Eigenschaft mit dem dynamischen Schlüsselwort aufrufen, oder? Wie kann ich überprüfen, ob die Methode vorhanden ist, bevor ich beispielsweise myDynamicObject.DoStuff () aufrufe?
c#
.net
methods
reflection
properties
Louis Rhys
quelle
quelle
DynamicObject
?Antworten:
Sie könnten so etwas schreiben:
Bearbeiten: Sie können sogar eine Erweiterungsmethode ausführen und diese so verwenden
quelle
über Reflexion
Ähnliches gilt für Methoden
quelle
GetType()
gibt es Methode wieGetProperties()
. Es wird ein Array von zurückgegebenPropertyInfo
. Aber wie kann ich dieGetProperties()
Methode anwenden?Es ist eine alte Frage, aber ich bin gerade darauf gestoßen.
Type.GetMethod(string name)
löst eine AmbiguousMatchException aus, wenn es mehr als eine Methode mit diesem Namen gibt, sodass wir diesen Fall besser behandeln könnenquelle
Wäre es nicht besser, dafür keine dynamischen Typen zu verwenden und Ihre Klasse eine Schnittstelle implementieren zu lassen? Anschließend können Sie zur Laufzeit überprüfen, ob ein Objekt diese Schnittstelle implementiert und somit über die erwartete Methode (oder Eigenschaft) verfügt.
Ich denke, das ist der einzig richtige Weg.
Sie beziehen sich auf die Ententypisierung, was in Szenarien nützlich ist, in denen Sie bereits wissen, dass das Objekt über die Methode verfügt, der Compiler dies jedoch nicht überprüfen kann. Dies ist beispielsweise in COM-Interop-Szenarien nützlich. (siehe diesen Artikel)
Wenn Sie zum Beispiel Ententypisierung mit Reflexion kombinieren möchten, dann verfehlen Sie meiner Meinung nach das Ziel der Ententypisierung.
quelle