我一直在C#中实现访问者模式。我所拥有的是:在不知道C类名字的情况下铸造到基类中#
层次的类:
public class A {
public virtual void Accept(Visitor visitor)
{
visitor.Visit(this);
}
}
public class B : A {
public override void Accept(Visitor visitor)
{
visitor.Visit(this);
}
}
的Visitor
类:
public abstract class Visitor {
public virtual void Visit(A item) {
//...
}
public virtual void Visit(B item) {
Visit(item as A);
}
}
混凝土Visitor
类:
public class ConcreteVisitor : Visitor {
public override void Visit(B item) {
// do something
// and call Visit for base class
Visit(item as A); // I need to know type A.
}
}
有什么办法来调用Visit
为item
的基类不知道它的d直接的基类名称?我希望能够在不更改ConcreteVisitor
类的情况下更改层次结构。
谢谢
为什么你甚至有'无效访问(B项)'如果会唯一所做的就是调用'无效访问(A项)' –
只需调用base.Visit(item),但您需要的事实可能是您的设计中出现其他问题的信号。 –
@AdrianoRepetti我不想打电话访问基地访问者,但访问基类的项目,类似'Visit(item.AsBaseClass())' – tomwesolowski