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

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

 

    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. 如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能够改变所引用的对象。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值