我对参数传递的方式的理解:
- 对于值类型来说,参数以传值来传递,这种方式没有人会感到疑惑.
- 对于引用类型来说,就比较困难.
自己写了一段小代码来帮助自己理解,如下:
using System;
public class ConsoleTest
{
public static void Main()
{
Test first = new Test();
first.Print();
Change(first);
if(first == null)
Console.WriteLine("Sorry,first is changed by Change method");
else
first.Print();
}
public static void Change(Test o)
{
o.Name = "It's Changed String";
o = null;
}
}
public class Test
{
private String _name = "It's a test string";
public String Name
{
get{ return _name;}
set{ _name = value;}
}
public void Print()
{
Console.WriteLine(_name);
}
}
执行结果:
It's a test string
It's Changed String
结论:
1:对于值类型的参数来说,传递的是值的拷贝.
2:对于引用类型的参数来说,传递的是引用本身的拷贝.这意味这参数引用的对象变了,却不影响传递给此参数的变量所引用的对象.如上所示,尽管参数变量o被改变成引用一个不存在的对象,但first仍然引用的是Test的一个实例对象,所以不会出现Sorry,first is changed by Change method字符串.
BTW:有时间还得请教Meyer关于广义接口与interface的区别.