假设有一个类型 A,它有一个 int 类型的属性 X。 ChangeA 方法接收类型 A的参数, 把 X 的值改为2 :
public static void ChangeA (A a)
{
a.X = 2;
}
// Main 方法创建类型 A的实例, 把 X 初始化为 1, 调用 ChangeA 方法
static void Main ()
{
A a1 = new A () { X = 1 };
ChangeA ( a1 );
Console.WriteLine ( string.Format( "a1.X:{0}", a1.X ) );
}
这段代码会输出什么啊? 1 还是 2 ? (好好琢磨一下)
答案视情况而定,首先要确定 A 是一个类,还是一个结构。
下面先假定 A是结构:
public struct A
{
public int X { get; set; }
}
结构按值传递。ChangeA 方法中的变量 a 得到的是一个 a1 的副本(复制一份)。 在方法 ChangeA 的最后修改,然后销毁。 a1的内容从来都没有被改变, 一直是 1.
我们再来假定 A是类时:
public class A
{
public int X { get; set; }
}
类按引用传递。ChangeA 方法中的变量 a得到的是 a1的引用。 当 ChangeA 修改 a的 X属性值时, a1.X值也会改变,因为它们是同一个对象。 所以结果是 2。