public class Program : IVisitor
public static void Main()
ICommonInterface[] children = new ICommonInterface[]{ new Child1(), new Child2(), new Child3() };
foreach( var child in children)
public void VisitedBy(Child1 c){ Console.WriteLine("Hello from Child1"); }
public void VisitedBy(Child2 c){ Console.WriteLine("Hello from Child2"); }
public void VisitedBy(Child3 c){ Console.WriteLine("Hello from Child3");}
public interface IVisitor
public void VisitedBy(Child1 c);
public void VisitedBy(Child2 c);
public void VisitedBy(Child3 c);
void Host(IVisitor visitor);
public interface ICommonInterface : IHost
public class Child1:ICommonInterface
public void Host(IVisitor visitor)
public class Child2:ICommonInterface
public void Host(IVisitor visitor)
public class Child3:ICommonInterface
public void Host(IVisitor visitor)