class RefExample { static void Method(ref int i) { i = 44; } static void Main() { int val = 0; Method(ref val); // val is now 44 } }
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
一看就明白,out和ref都是引用傳值,不同之處就是使用ref傳變量的時候,這個變量必須是經過初始化的
而out就沒有這個限制! 但是out還是有一個限制的,就是在傳遞之前不需要付值,但傳遞給方法之後,該
方法必須要給改變量付值。
下面引用msdn的一句話:
ref 和 out 關鍵字在運行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法採用 ref
參數,而另一個方法採用 out 參數,則無法重載這兩個方法。例如,從編譯的角度來看,以下代碼中的兩個
方法是完全相同的,因此將不會編譯以下代碼:
class CS0663_Example { // compiler error CS0663: "cannot define overloaded // methods that differ only on ref and out" public void SampleMethod(out int i) { } public void SampleMethod(ref int i) { } }