저는 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를 모른 채로 있습니다. irect 기본 클래스 이름? ConcreteVisitor
클래스를 변경하지 않고 계층 구조를 변경할 수 있기를 바랍니다.
왜 당신은 심지어 유일한 것은 않는 경우''이 무효 방문 (B 항목) 않습니다됩니다 호출'무효 방문 (A 항목)' –
base.Visit (item)를 호출하면되지만, 디자인에 뭔가 다른 것이 있다는 신호 일 수 있다는 사실이 필요합니다. –
@AdrianoRepetti 기본 방문에서 방문을 호출하고 싶지 않지만 방문 항목 (항목 .AsBaseClass())과 같은 항목의 기본 클래스를 방문하십시오 – tomwesolowski