ref 和 out 聲明的參數(shù)
1.兩者都是按地址傳遞的,使用后都將改變原來參數(shù)的數(shù)值谒亦。
2.ref 可以把參數(shù)的數(shù)值傳遞進函數(shù)
3.out是要把參數(shù)清空鹿响,就是說你無法把一個數(shù)值從out傳遞進去的周伦,out進去后,參數(shù)的數(shù)值為空湃崩,所以你必須初始化一次荧降。
4.這個就是兩個的區(qū)別:ref是有進有出,out是只出不進攒读。
參數(shù)傳遞:ref
概念:
1.ref 關(guān)鍵字使參數(shù)按引用傳遞朵诫。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時薄扁,在方法中對參數(shù)的任何更改都將反映在該變量中剪返。
2. 若要使用 ref 參數(shù)废累,則方法定義和調(diào)用方法都必須顯式使用 ref 關(guān)鍵字。 即 方法參數(shù) 中必須聲明 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傳遞的參數(shù)將會改變其本事的值 邑滨,因此為 有進有出,修改本身钱反。
參數(shù)傳遞:out
概念:
1.out 關(guān)鍵字使參數(shù)按引用傳遞掖看。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時面哥,在方法中對參數(shù)的任何更改都將反映在該變量中哎壳。
2.在Out傳入時 會將參數(shù)本身清空,因此 此參數(shù)無需初始化尚卫,out在傳入時必須現(xiàn)在函數(shù)內(nèi)初始化才可調(diào)用
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傳遞的參數(shù)將會改變其本事的值 ,當(dāng)然在函數(shù)內(nèi)必須率先對其進行賦值才可吱涉。
因此為? 無進有出蹲坷,修改本身。??