happmaoo 发表于 2013-1-19 04:09:13

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]
查看完整版本: C#值传递引用类型数据的问题