如何使用扩展构建双重调度

我有一个具有类的层次结构的库如下:

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抽象并在具体类中重载它。 但请记住BaseAB都在库中,所以我不能自由地添加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#本身支持多个调度,因此在大多数情况下不需要实现访问者模式。