简单的总结:
参数中如果不加入ref前缀,那么就是by value传递。
为什么初学者往往有疑问呢,让我们来举例说明
加入我们有这样一个类:
我们定义一个方法来传递Class1类型的变量,并且在MainPage中调用Code:public class Class1 { public string Data1; }
大家执行一下会发现Test函数可以修改obj1的成员变量Data1,而且能够成功。Code:void Test(Class1 object1) { object1.Data1 = "hello"; } // 构造函数 public MainPage() { InitializeComponent(); Class1 obj1 = new Class1(); Test(obj1); // 用于本地化 ApplicationBar 的示例代码 //BuildLocalizedApplicationBar(); }
所以很多人以为c#中参数都是按照reference传递的,其实不对!
之所以这样是因为,c#中构造出来的对象都是对象reference,也就是说obj1是一个reference,
而Test函数按照值传递的方式把obj1传入,所以Test内部对obj1的改变能够生效,
如果我们改变obj1本身,而不是其成员变量,那就不会生效!
Regards
Vincent
http://weibo.com/xueyw

Reply With Quote

