C# 值类型与引用类型相互嵌套

1,值类型里包含引用类型,如:struct包含class对象。
该引用类型将作为值类型的成员变量,堆栈上将保存该成员的引用,而成员的实际数据还是保存在托管堆中.
2,引用类型包含值类型,如:class包含int。
如果是成员变量,做为引用类型的一部分将分配在托管堆上 。
如果是方法里的局部变量,则分配在该段代码的线程栈上 。

如下:

public class ReceiveTest : MonoBehaviour
{
    private void Awake()
    {
        //对于引用类型new才会有新的内存存在,不new而赋值不会有新的内存存在。
        //对于值类型在使用“=”赋值时,会自动调用隐式的构造函数,会new一次。
        TestFruit tf = new TestFruit(100);
        TestFruit tf2 = tf;
        tf2.fruit.apple = 200;
        tf2.num = 200;
        print(tf.fruit.apple);//打印200 说明共用托管堆中同一个MyFruit类实例
        print(tf.num);//打印100 说明堆栈上存在各自的num
    }
}

public class MyFruit
{
    public int apple;
}
public struct TestFruit
{
    public int num;
    public MyFruit fruit;
    public TestFruit(int num)
    {
        this.num = num;
        fruit = new MyFruit();
        fruit.apple = num;
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值