C#值传递引用类型数据的问题

本文深入探讨了在编程中使用引用类型传递时,如何通过改变引用对象内部状态来影响外部对象,同时解释了在某些情况下无法直接修改引用所指向的实际对象的原因。通过示例代码分析,读者能更好地理解引用传递机制及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做了道题,大概可以简化如下

public class C

{

public int i = -1;

public C(int i)

{

this.i = i;

}

public static void set(C c)

{

c.i = 0;

c = new C(13);

}

}

class Program

{

static void Main(string[] args)

{

C c = new C(12);

C.set(c);

Console.WriteLine(c.i.ToString());

Console.Read();

}

}

输出是多少?

我选择的12,但是结果是0。原因解释:

这里传入的是引用,在复制的过程中,复制了指向调用者的对象的引用。 这里传入的其实是一个引用,在复制的过程中,复制了指向调用者的对象的引用,在调用set()方法与调用者指向同一个对象,所以可以改变状态数据,但是在调用的方法体内,重新实例化,却是不行的。Andrew Troelsen的书中写道:If a reference type is passed by value, the callee may change the values of the object’s state data but not the object it is referencing. 如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能够改变所引用的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值