Z dynamic
wpisać w C# 4.0, ty mógłby zrobić coś takiego:
dynamic obj = GetDynamicObject();
if (obj != null && obj.GetType().GetMethod("DoSomething") != null)
{
obj.DoSomething();
}
ale jedynym sposobem, aby stwierdzić, czy typ ma metodę na pierwszym miejscu jest użycie refleksji; więc powyższe podejście tak naprawdę niczego nie kupuje (równie dobrze można uzyskać MethodInfo
, które można uzyskać, dzwoniąc pod numer GetMethod
i po prostu Invoke
).
Edit: Jeśli jesteś otwarty na próby wywołania metody, nawet jeśli go nie ma, to Yuriy's answer jest prawdopodobnie to, czego szukasz. Moja oryginalna odpowiedź była dosłowną odpowiedzią na sposób, w jaki sformułowałeś swoje pytanie: "Jak wywołać metodę C# tylko wtedy, gdy istnieje."
Co masz na myśli –
Nawet z myślą o odbiciu, trzeba wziąć pod uwagę prototyp metody: 'int Foo (string string)' to nie to samo co 'double Foo (int bar, IDictionary quux)'. –
Szukasz częściowych metod? http://msdn.microsoft.com/en-us/library/6b0scde8.aspx – Ani