我有一个具有类层次结构的库,如下所示:
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);
}
现在实现双重调度的规范方法是使该方法MakeMeDoStuff
摘要中Base
并在具体类中重载它。但请记住Base
, A
and B
在图书馆里,所以我不能自由地添加does方法。
添加方法扩展不起作用,因为无法添加抽象扩展。
有什么建议吗?
你可以只使用dynamic
calls:
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 */ }
}
自引入以来,C# 本身就支持多重分派dynamic
,因此在大多数情况下实现访问者模式是不必要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)