ref 和 out 聲明的參數
1.兩者都是按地址傳遞的,使用后都將改變原來參數的數值。
2.ref 可以把參數的數值傳遞進函數
3.out是要把參數清空,就是說你無法把一個數值從out傳遞進去的,out進去后,參數的數值為空,所以你必須初始化一次。
4.這個就是兩個的區別:ref是有進有出,out是只出不進。
參數傳遞:ref
概念:
1.ref 關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數的任何更改都將反映在該變量中。
2. 若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。 即 方法參數 中必須聲明 ref 修飾
代碼:
static void Main(string[] args){
? ? ? ? ? int _ref = 5;
? ??????OldRef(ref _ref);
????????Console.WriteLine(_ref);
}
public static void OldRef(ref int i){
? ? ? ? ? i = 44;
}
如此 以上的C#代碼 將會打印出值: 44,因為通過ref傳遞的參數將會改變其本事的值 ,因此為 有進有出,修改本身。
參數傳遞:out
概念:
1.out 關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數的任何更改都將反映在該變量中。
2.在Out傳入時 會將參數本身清空,因此 此參數無需初始化,out在傳入時必須現在函數內初始化才可調用
static void Main(string[] args){
????????int _out;
? ???????OldOut(out _out); //無需使用初始化
? ?????? Console.WriteLine(_out);
}
public static void OldOut(out int i){
? ? ? ? ? //? Console.WriteLine(i); //如果直接打印將被報空值?
? ? ? ? ?i = 55; //此時對傳入的out進行賦值
}
如此 以上的C#代碼 將會打印出值: 55,因為通過out傳遞的參數將會改變其本事的值 ,當然在函數內必須率先對其進行賦值才可。
因此為? 無進有出,修改本身。??