public void TestHierachy1()
    {
        Hierachy1.VisitorImplementation visitor = new Hierachy1.VisitorImplementation();

        Hierachy1.CollectionClass collection = new Hierachy1.CollectionClass();
        collection.AddElement(new Hierachy1.SingleClass("value1"));
        collection.AddElement(new Hierachy1.SingleClass("value2"));
        collection.AddElement(new Hierachy1.SingleClass("value3"));
        collection.AddElement(new Hierachy1.SingleClass("value4"));
        collection.Accept(visitor);
    }
 public void Process <type>(type parameter) where type : class
 {
     if (parameter is CollectionClass)
     {
         Console.WriteLine("CollectionClass");
         CollectionClass cls = parameter as CollectionClass;
         foreach (SingleClass item in cls)
         {
             item.Accept(this);
         }
     }
     else if (parameter is SingleClass)
     {
         SingleClass cls = parameter as SingleClass;
         Console.WriteLine("SingleClass (" + cls.Buffer + ")");
     }
 }