[c#] Wie überprüft man, ob ein Objekt eine bestimmte Methode / Eigenschaft besitzt?



Answers

über Reflexion

 var property = object.GetType().GetProperty("YourProperty")
 property.SetValue(object,some_value,null);

Ähnliches gilt für Methoden

Question

Dynamisches Muster vielleicht verwenden? Sie können jede Methode / Eigenschaft mit dem dynamischen Schlüsselwort aufrufen, richtig? Wie überprüfe ich, ob die Methode vor dem Aufruf von myDynamicObject.DoStuff () existiert?




Wäre es nicht besser, keine dynamischen Typen dafür zu verwenden und Ihre Klasse eine Schnittstelle implementieren zu lassen? Dann können Sie zur Laufzeit prüfen, ob ein Objekt diese Schnittstelle implementiert und somit die erwartete Methode (oder Eigenschaft) hat.

public interface IMyInterface
{
   void Somemethod();
}


IMyInterface x = anyObject as IMyInterface;
if( x != null )
{
   x.Somemethod();
}

Ich denke, das ist der einzig richtige Weg.

Die Sache, auf die du dich beziehst, ist die Duck-Typisierung, die in Szenarien nützlich ist, in denen du bereits weißt, dass das Objekt die Methode hat, aber der Compiler kann das nicht überprüfen. Dies ist zum Beispiel in COM-Interop-Szenarien nützlich. (siehe this Artikel)

Wenn du zum Beispiel Duck-Typing mit Reflection kombinieren willst, dann vermisse ich das Ziel des Enten-Tippens.






Related