2 mrt 2012

referring to Parent object Best Practices? c#

Dont ask me wath the best solution is.
but they work for me
please comment your opinion about the best choice
 SOLUTION WITH DELEGATES

    /// 

    /// Parrent Object
    /// 
    public class Parent : ObservableCollection<child>
    {
        public string Name;
        public new void AddChild(string name)
        {
            child NewItem = new child();
            NewItem.OtherParameter = name;
            NewItem.GetParentEvent += new Func<Parent>(item_GetParentEvent);
            base.Add(NewItem);
        }
        Parent item_GetParentEvent() { return this; }
    }


   /// 

    /// Child Object
    /// 
    public class child
    {
        public string OtherParameter;
        private event Func<Parent> getParentEvent;
        public event Func<Parent> GetParentEvent
        {// First try to remove the handler, then re-add it
            add
            {               
                getParentEvent -= value;
                getParentEvent += value;
            }
            remove{getParentEvent -= value;}
        }
        private Parent _ParentItem;
        [System.Xml.Serialization.XmlIgnoreAttribute]
        public Parent ParentItem
        {
            get{GetParrent();
                return _ParentItem;}
            set{_ParentItem = value;}
        }
        private void GetParrent()
        {
            if (getParentEvent != null){ParentItem = getParentEvent();}
        }
  

     
        public class FamilyClass
        {
            Parent MyDad = new Parent();
            Parent MyMam = new Parent();
           public void ExecuteTime()
           {
                MyDad.Name = "My Daddy";
                MyDad.AddChild("Me myself and i");
                Console.WriteLine(MyDad.ElementAt(0).ParentItem.Name);
                MyDad.Name = "My Daddy's split personality";
                Console.WriteLine(MyDad.ElementAt(0).ParentItem.Name);
                MyMam.Name = "My Mam";
                child MySelf = MyDad.ElementAt(0);
                MySelf.GetParentEvent += new Func<Parent>(MySelf_GetParentEvent);
                Console.WriteLine(MySelf.ParentItem.Name);
                Console.ReadLine();
           }
           Parent MySelf_GetParentEvent()
           {
               return MyMam;
           }                            
        }
        static void Main(string[] args)
        {
            FamilyClass   bb = new FamilyClass();
            bb.ExecuteTime();         
        }    




SOLUTION WITH CONTSTRUCTOR

    public class Parent : ObservableCollection<child>
    {
        public string Name;
        public new void Add(string name)
        {
            child NewItem = new child(this) { OtherParameter = name };
            base.Add(NewItem);
        }
    }



    public class child
    {
        public child(Parent MyParentObject)
        {
            _ParentItem = MyParentObject;
        }

        readonly Parent _ParentItem;
        public string OtherParameter;
        public Parent ParentItem
        {
            get { return _ParentItem; }
        }
    }



 static void Main(string[] args)
        {
             Parent MyDad = new Parent();
            MyDad.Name = "My Dad";
            MyDad.Add("ikke");
            Console.WriteLine(MyDad.ElementAt(0).ParentItem.Name);
            MyDad.Name = ""My Daddy's split personality";
            Console.WriteLine(MyDad.ElementAt(0).ParentItem.Name);
            Console.ReadLine();
        }