简单的总结:
参数中如果不加入ref前缀,那么就是by value传递。

为什么初学者往往有疑问呢,让我们来举例说明
加入我们有这样一个类:
Code:
public class Class1
{
    public string Data1;
}
我们定义一个方法来传递Class1类型的变量,并且在MainPage中调用
Code:
void Test(Class1 object1)
 {
     object1.Data1 = "hello";
 }

 // 构造函数
 public MainPage()
 {
     InitializeComponent();

     Class1 obj1 = new Class1();
     Test(obj1);

  

     // 用于本地化 ApplicationBar 的示例代码
     //BuildLocalizedApplicationBar();
 }
大家执行一下会发现Test函数可以修改obj1的成员变量Data1,而且能够成功。
所以很多人以为c#中参数都是按照reference传递的,其实不对!
之所以这样是因为,c#中构造出来的对象都是对象reference,也就是说obj1是一个reference,
而Test函数按照值传递的方式把obj1传入,所以Test内部对obj1的改变能够生效,
如果我们改变obj1本身,而不是其成员变量,那就不会生效!

Regards
Vincent
http://weibo.com/xueyw