private static void VisitChildren(Person p)
 {
     // Visit all Children
     IAggregatable agg = p as IAggregatable;
     agg.VisitChildren((child, childinfo, state) =>
     {
         if (child is Address)
         {
             Console.WriteLine("Address is: {0}", ((Address)child).Street);
         }
         return true;
     });
 }
        static void Main(string[] args)
        {
            Person p = new Person() { Name = "Adam Greene" };
            var addr1 = new Address() { Street = "100 Main St" };
            var addr2 = new Address() { Street = "200 Left St" };
            var addr3 = new Address() { Street = "300 Right St" };

            p.Addresses.Add(addr1);
            p.Addresses.Add(addr2);
            p.MainAddress = addr3;

            // Show that parent is automatically set
            Console.WriteLine("Parent Name: {0}", addr1.Parent.Name);

            //VisitChildren(p);

            ((IDisposable)p).Dispose();
        }