对于引用类型对象来说,不管是将其作为值参数还是引用参数,都可以在方法成员内部修改它的成员。
如果在方法内部设置形参本身,会使其与在方法外部的时候有不一样的状态。
将引用类型对象作为值参数传递 :如果在方法内创建一个新对象并赋值给形参,将切断形参与实参的关系,并且在方法调用结束后,新对象也将不复存在。
将引用类型对象作为引用参数传递 : 如果在方法内创建一个新对象赋值给形参,在方法结束后该对象依然存在,并且是实参所引用的值。
将引用类型对象作为值参数传递的例子:
class Program
{
static void Main(string[] args)
{
A a1 = new A();
Console.WriteLine(a1.a);
Change(a1);
Console.WriteLine(a1.a);
}
static void Change(A x)
{
x.a = 6;
Console.WriteLine(x.a);
x = new A();
Console.WriteLine(x.a);
}
}
class A
{
public int a = 5;
}
结果:
将引用类型对象作为引用参数传递的例子:
class Program
{
static void Main(string[] args)
{
A a1 = new A();
Console.WriteLine(a1.a);
Change(ref a1);
Console.WriteLine(a1.a);
}
static void Change(ref A x)
{
x.a = 6;
Console.WriteLine(x.a);
x = new A();
Console.WriteLine(x.a);
}
}
class A
{
public int a = 5;
}
本来想既然有引用类型做为值参数和引用参数,会不会有值类型作为值参数和引用参数。但是仔细一分析发现被这个标题迷惑了。值参数和引用参数是一种参数传递的方式,引用类型可以是类、委托等等,因此可以被新对象赋值,但是值类型并没有这种可能。