1、ref傳進去的參數必須在調用前初始化,out不必,即:
int i;
SomeMethod( ref i );//語法錯誤
SomeMethod( out i );//通過
2、ref傳進去的參數在函數內部可以直接使用,而out不可:
public void SomeMethod(ref int i)
{
int j=i;//通過
//...
}
public void SomeMethod(out int i)
{
int j=i;//語法錯誤
}
3、ref傳進去的參數在函數內部可以不被修改,但out必須在離開函數體前進行賦值。
ref在參數傳遞之前必須初始化;而out則在傳遞前不必初始化,且在 ... 值類型與引用類型之間的轉換過程稱爲裝箱與拆箱。
總結:
應該說,系統對ref的限制是更少一些的。out雖然不要求在調用前一定要初始化,但是其值在函數內部是不可見的,也就是不能使用通過out傳進來的值,並且一定要在函數內賦一個值。或者說函數承擔初始化這個變量的責任。