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的

 

转载于:https://www.cnblogs.com/xmg92/p/6963446.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值