Geht in C# auch für Objekte ohne dynamic, per Reflection. Es zeigt aber, wie anstrengend der Ententanz gelegentlich sein kann.
public void foo(object duck)
{
if (duck != null)
{
MethodInfo mi = duck.GetType().GetMethod("quak", Type.EmptyTypes);
if (mi != null)
mi.Invoke(duck, null);
}
// Oder mit neueren C# Sprachmitteln auch als Einzeiler:
duck?.GetType().GetMethod("quak", Type.EmptyTypes)?.Invoke(duck, null);
}