public void VisitOne(One one);
public void VisitTwo(Two two);
public T Accept(IVisitor visitor);
class One : IVisitable<int>, IVisitable<string>
int IVisitable<int>.Accept(IVisitor visitor)
string IVisitable<string>.Accept(IVisitor visitor)
class Two : IVisitable<int>, IVisitable<string>
int IVisitable<int>.Accept(IVisitor visitor)
string IVisitable<string>.Accept(IVisitor visitor)
public void VisitOne(One one)
int i = (one as IVisitable<int>).Accept(this);
string s = (one as IVisitable<string>).Accept(this);
Console.WriteLine($"Int: {i.ToString()}, String: {s}");
public void VisitTwo(Two two)
int i = (two as IVisitable<int>).Accept(this);
string s = (two as IVisitable<string>).Accept(this);
Console.WriteLine($"Int: {i.ToString()}, String: {s}");
public static void Main()