我一直在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