假设有一个类型A,它有一个Int类型的属性X.
ChangA方法是接收A的参数,把X的值改为2
public class A
{
public int X { get; set; }
}
class Program
{
public static void ChangeA(A a)
{
a.X = 2;
}
static void Main()
{
A a1 = new A { X = 1 };
ChangeA(a1);
WriteLine($"a1.X: {a1.X}");
ReadLine();
}
}
结果输出是什么?
答案是根据A是一个什么类型
如果A是一个类,就输出2
类试按引用传递,a1是堆上的同一个对象引用的变量,ChangeA修改是修改的栈上数据.
如果A是一个结构 就输出1
结构是按值传递.ChangeA方法中的变量是a1堆栈中的一个副本,在方法ChangeA中修改,销毁.a1一直不变. 使用ref 值传递也可以像引用传递一样.