值类型与引用类型及在内存中的存储

本文探讨了值类型和引用类型的区别,以及它们在内存中的存储方式。值类型直接存储数据,如数字、布尔等,而引用类型存储指向内存地址的指针。字符串作为特殊的引用类型,是不可变的。在内存中,值类型变量存储其值,引用类型变量存储指向堆中实例的指针。
摘要由CSDN通过智能技术生成
FROM MSDN:

如果数据类型在它自己分配的内存中存的是具体数据,则该数据类型就是“值类型”;如果存储的是指向一个地址的指针,那么该数据类型是“引用类型”。

值类型

值类型包括:

  • 所有数字数据类型

  • BooleanChar 和 Date

  • 所有结构,即使其成员是引用类型

  • 枚举,因为其基础类型总是 SByteShortIntegerLongByteUShortUInteger 或 ULong

引用类型

引用类型包括:

  • String

  • 所有数组,即使其元素是值类型

  • 类类型,如 Form

  • 委托

 	public string get()
        {
            mypost op = new mypost();
            mypost opp = op;
            op.subject = "I am right!";           
            string s = "Iamright_str";
            set(op,ref s);
            return op.subject + "" + s + "" + opp.subject;
        }

        public void set(mypost op ,ref string str)
        {
            mypost o = op;
            op.subject = "I am wrong!";
            str = "Iamwrong_str!";

        }

调用GET() 输出:I am wrong!Iamwrong_str!I am wrong!

因为OP,OPP都是引用类型,所以当类的实例OP作为参数传递给SET时,传递的是一个地址,如果实际储存的值(实例)改变,他会跟着改变。OPP存储的地址与OP一致。如图:


但是注意这里,string参数需要加上ref才是传递地址,否则会像值类型一样不改变内容。

这是因为s

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值