我有一个类库,其中包含一些基类和从它们派生的其他类。在这个类库中,我利用多态性来做我想做的事情。现在在一个消费应用程序中,我想根据子类的运行时类型来更改某些代码的行为。因此假定:通过扩展方法的多态性?
public class Base { }
public class Child1 : Base { }
public class Child2 : Base { }
现在在消费应用我想做些什么,如下所示(请注意,下面所有的类都是在消费应用程序并不能在类库引用):
public interface IMyInterface1 { }
public interface IMyInterface2 { }
public static class Extensions
{
public static void DoSomething(this Base myObj, Object dependency)
{
}
public static void DoSomething(this Child1 myObj, Object dependency)
{
IMyInterface1 myInterface = dependency as IMyInterface1;
if (myInterface != null)
{
//Do some Child1 specific logic here
}
}
public static void DoSomething(this Child2 myObj, Object dependency)
{
IMyInterface2 myInterface = dependency as IMyInterface2;
if (myInterface != null)
{
//Do some Child2 specific logic here
}
}
}
UPDATE:
这是行不通的。它总是调用基类的扩展方法。有没有其他方法可以让我做到这一点,并避免必须明确检查运行时类型?原因是因为可以添加更多来自Base
的类,并且相应的扩展方法可能来自其他外部程序集。
在此先感谢。
你为什么不尝试一下先,然后用如有必要,什么地方出了错细节问? –
好的会做到这一点。 – Kassem
这不起作用;扩展方法是静态调度的。 – SLaks