public interface IA:II
    {
        String Name { get; }
         Int32 ID { get; }
    }
    public interface II {
        String T { get; set; }
        String Name { get; set; }
    }
    public interface IB
    {
        String Name { get; }
        Int32 ID { get; }
    }

    public class A:IA
    {
        String _Name = "";
        Int32 _ID = 0;
        String _T = "";
        public String T
        {
            get
            {
                return "This Is T [" + _T + "]";
            }
            set { _T = value; }
        }
        public A(String __Name, Int32 __ID)
        {
            _Name = __Name;
            _ID = __ID;
        }
        public String Name
        {
            get { return "This Is Name In A :[" + _Name + "]"; }
            set { _Name = value; }
        }
        public Int32 ID
        {
            get { return _ID; }
            set { _ID = value; }
        }

        public Int32 Ex
        {
            get { return _ID; }
            set { _ID = value; }
        }
    }

    public class B : IB
    {
        String _Name = "";
        Int32 _ID = 0;
        public B(String __Name, Int32 __ID)
        {
            _Name = __Name;
            _ID = __ID;
        }
        public String Name
        {
            get { return "This Is Name In B :[" + _Name + "]"; }
            set { _Name = value; }
        }
        public Int32 ID
        {
            get { return _ID; }
            set { _ID = value; }
        }
        public Int32 Ex
        {
            get { return _ID; }
            set { _ID = value; }
        }
    }
    public class C : IB
    {
        String _Name = "";
        Int32 _ID = 0;
        public C(String __Name, Int32 __ID)
        {
            _Name = __Name;
            _ID = __ID;
        }
        public String Name
        {
            get { return "This Is Name In C :[" + _Name + "]"; }
            set { _Name = value; }
        }
        public Int32 ID
        {
            get { return _ID; }
            set { _ID = value; }
        }
    }
    public class X
    {
      public  IA A { get; set; }
      public IB B { get; set; }
      public IB C { get; set; }
    }

  

 

             A  _A = new A("_A", 1);
            Console.WriteLine(_A.Name + _A.ID);//_A.Ex可访问
            IA AA = new A("AA", 11);
            Console.WriteLine(AA.Name + AA.ID);//AA.Ex不可访问 接口中未定义  AA.T可访问 继承自接口II
            B _B = new B("_B", 2);
            IB BB = new B("BB", 22);
            var C = new X
            {
                A = new A("XA", 931),
                B = new B("XB", 932),
                C = new C("XC", 933),
            };
            Console.WriteLine(_B.Name + _B.ID);
            Console.WriteLine(BB.Name + BB.ID);

            Console.WriteLine(C.A.Name + C.A.ID);
            Console.WriteLine(C.B.Name + C.B.ID);
            Console.WriteLine(C.C.Name + C.C.ID);

            Console.WriteLine(C.A.T);
            //C.A.ID C.A.Name不可赋值[同时存在取本体内的了]
            //A接口中定义为只读
            //C.A.T可以 II接口中定义为可读写
            C.A.T = "Set Value";
            Console.WriteLine(C.A.T);
            Console.ReadLine();    

  

 

//所有引用均指向同一对象

            var _A_ = new A("_A_", 9999);
            _A_.T = "Creat By _A_";
            IA _IA_ = _A_;
            II _II_ = _A_;
            var _CA_ = _A_;
            var _CIA_ = _IA_;
            Console.WriteLine("_A_ "+ "|" + _A_.T);
            Console.WriteLine("_IA_ " + "|" + _IA_.T);
            Console.WriteLine("_II_ " + "|" + _IA_.T);
            Console.WriteLine("_CA_ " + "|" + _CA_.T);
            Console.WriteLine("_CIA_ " + "|" + _CIA_.T);
            Console.WriteLine("------------------------------------------");
            _A_.T = "Change By _A_";
            Console.WriteLine("_A_ " + "|" + _A_.T);
            Console.WriteLine("_IA_ " + "|" + _IA_.T);
            Console.WriteLine("_II_ " + "|" + _IA_.T);
            Console.WriteLine("_CA_ " + "|" + _CA_.T);
            Console.WriteLine("_CIA_ " + "|" + _CIA_.T);
            Console.WriteLine("------------------------------------------");

            _IA_.T = "Change By _IA_";
            Console.WriteLine("_A_ " + "|" + _A_.T);
            Console.WriteLine("_IA_ " + "|" + _IA_.T);
            Console.WriteLine("_II_ " + "|" + _IA_.T);
            Console.WriteLine("_CA_ " + "|" + _CA_.T);
            Console.WriteLine("_CIA_ " + "|" + _CIA_.T);
            Console.WriteLine("------------------------------------------");


            _II_.T = "Change By _II_";
            Console.WriteLine("_A_ " + "|" + _A_.T);
            Console.WriteLine("_IA_ " + "|" + _IA_.T);
            Console.WriteLine("_II_ " + "|" + _IA_.T);
            Console.WriteLine("_CA_ " + "|" + _CA_.T);
            Console.WriteLine("_CIA_ " + "|" + _CIA_.T);
            Console.WriteLine("------------------------------------------");


            _CA_.T = "Change By _CA_";
            Console.WriteLine("_A_ " + "|" + _A_.T);
            Console.WriteLine("_IA_ " + "|" + _IA_.T);
            Console.WriteLine("_II_ " + "|" + _IA_.T);
            Console.WriteLine("_CA_ " + "|" + _CA_.T);
            Console.WriteLine("_CIA_ " + "|" + _CIA_.T);
            Console.WriteLine("------------------------------------------");


            _CIA_.T = "Change By _CIA_";
            Console.WriteLine("_A_ " + "|" + _A_.T);
            Console.WriteLine("_IA_ " + "|" + _IA_.T);
            Console.WriteLine("_II_ " + "|" + _IA_.T);
            Console.WriteLine("_CA_ " + "|" + _CA_.T);
            Console.WriteLine("_CIA_ " + "|" + _CIA_.T);
            Console.WriteLine("------------------------------------------");
            Console.ReadLine();