六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 56|回复: 0

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

[复制链接]

升级  74.2%

2220

主题

2220

主题

2220

主题

榜眼

Rank: 8Rank: 8

积分
6710
 楼主| 发表于 2013-1-19 04:09:13 | 显示全部楼层 |阅读模式
今天做了道题,大概可以简化如下
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. 如果按值传递引用类型,被调用者可能改变对象的状态数据的值,但不能够改变所引用的对象。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表