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