/// <summary>
 /// A method to visit/accept a visitor, for the visitor pattern.
 /// </summary>
 /// <param name="visitor">The Visitor being accepted.</param>
 /// <param name="obj">The object calling the visit method - null if this is the root.</param>
 public override object Visit(Interfaces.IVisitor visitor, object obj)
 {
     return visitor.Visit(this, obj);
 }