class和struct

值类型,引用类型都是C#中的两种数据类型

 

 值类型被分配在栈中,引用类型分配在堆上。我们平时New的对象就是通过引用地址指向堆中的内存。

值类型一经声明,编译器就会为其分配一块内存空间

引用类型声明后会在栈上开辟一小块空间用于存放引用地址,对象实例化后会为其堆上分配空间,并把堆上地址保存到栈上

  class Person
    {
        public int Age { get; set; }
    }
    struct Student
    {
        public int Age { get; set; }
    }

如上:声明一个Person类class和一个Student结构体struct

     Person p1 = new Person();
     p1.Age = 18;
     Person p2 = p1;
     p2.Age = 28;
     Console.WriteLine(p1.Age);
     Console.WriteLine(ReferenceEquals(p1,p2));

如上:创建一个对象p1并为属性赋值→把p1赋值给p2 →修改p2的属性→结果为 28,true

可以看出p1和p2指向的是同一块堆地址,p2变化了同时引起了p1的变化。

    Student s1 = new Student();
    s1.Age = 18;
    Student s2 = s1;
    s2.Age = 28;
    Console.WriteLine(s1.Age);
    Console.WriteLine(ReferenceEquals(s1, s2));

如上:创建一个对象s1并为属性赋值→把s1赋值给s2 →修改s2的属性→结果为 18,false。

用于结构体struct是值类型,s1赋值给s2是把s1拷贝了一份放在栈上。这样当s2变化的时候是不影响s1的

 

posted @ 2017-06-08 16:17  感冒的Alex  阅读(78)  评论(0)    收藏  举报