class Program
    {
        static void Main(string[] args)
        {
            Person A = new Person() { Name = "小孩", Age = 12 };
            Person B = A;//只是建立个A的新副本,复制完A的值到B之后两者再无联系
            A.Age = 24; A.Name = "青年";
            A.ShowMessage();
            B.ShowMessage(); //两者输出不同,证明了两者之间毫无联系,更改A不会影响B,更改B也不会影响A.
            Console.ReadKey();
            PersonObject C = new PersonObject() { Name = "小孩", Age = 12 };
            PersonObject D = C; //引用类型使用等号使两个对象指向同一个引用,修改任意一个对象都会使另一个对象改变
            C.Age = 24; C.Name = "青年";
            C.ShowMessage();
            D.ShowMessage(); //尽管之前将D引用于C,但这只是表面C和D都引用至同一个对象PersonObejct。更改C或D其中一个都会
            //改变PersonObejct的属性,所以两个对象输出一样。
            Console.ReadKey();
            
        }
    }
    /// <summary>
    /// 值类型struct,次结构无法被继承,和int,string,double一样存放于内存中栈
    /// </summary>
    public struct Person  //值类型struct和对象类型一样,都能有方法和属性,也能实现接口,但是无法继承和被继承.
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public void ShowMessage()
        {

            Console.WriteLine("My Name is " + Name + "My Age is" + Age); 
        }
      
    }
    /// <summary>
    /// 引用类型,即.Net中的对象,存放于堆
    /// </summary>
    public class PersonObject //引用类型
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public void ShowMessage()
        {

            Console.WriteLine("My Name is " + Name + "My Age is" + Age);
        }
    }