如何使用扩展构建双重调度
本文关键字:调度 构建 何使用 扩展 | 更新日期: 2023-09-27 18:22:25
我有一个库,它有如下的类层次结构:
class Base {}
class A : Base {}
class B : Base {}
现在我想做不同的事情,这取决于我的对象的类型,无论是A还是B。因此,我决定采用并实现双重调度,以避免检查类型。
class ClientOfLibrary {
public DoStuff(Base anObject)
{
anObject.MakeMeDoStuff(this);
}
private void DoStuffForanA(A anA);
private void DoStuffForaB(B aB);
}
现在实现双重调度的规范方法是在Base
中抽象方法MakeMeDoStuff
,并在具体类中重载它。但请记住,Base
、A
和B
都在库中,所以我不能自由添加do方法。
添加方法扩展不起作用,因为无法添加抽象扩展。
有什么建议吗?
您只需使用dynamic
调用:
class ClientOfLibrary {
public DoStuff(Base o)
{
DoStuffInternal((dynamic)o);
}
private void DoStuffInternal(A anA) { }
private void DoStuffInternal(B aB) { }
private void DoStuffInternal(Base o) { /* unsupported type */ }
}
自从引入dynamic
以来,C#本机支持多调度,因此在大多数情况下不需要实现访问者模式。