操作介紹
out關鍵字會導致參數通過引用來傳遞。這與
ref關鍵字類似,不同之處在於
ref要求變數必須在傳遞之前進行初始化。若要使用
out參數,方法定義和調用方法都必須顯式使用
out關鍵字。例如:
classOutExample{staticvoidMethod(outinti){i=44;}staticvoidMain(){intvalue;Method(outvalue);//valueisnow44}}
儘管作為
out參數傳遞的變數不需要在傳遞之前進行初始化,但需要調用方法以便在方法返回之前
賦值。
ref和
out關鍵字在運行時的處理方式不同,但在編譯時的處理方式相同。因此,如果一個方法採用
ref參數,而另一個方法採用
out參數,則無法重載這兩個方法。例如,從編譯的角度來看,以下代碼中的兩個方法是完全相同的,因此將不會編譯以下代碼:
classCS0663_Example{//compilererrorCS0663:"cannotdefineoverloaded//methodsthatdifferonlyonrefandout"publicvoidSampleMethod(outinti){}publicvoidSampleMethod(refinti){}}
但是,如果一個方法採用
ref或
out參數,而另一個方法不採用這兩類參數,則可以進行重載,如下所示:
classRefOutOverloadExample{publicvoidSampleMethod(inti){}publicvoidSampleMethod(outinti){}}
屬性不是變數,因此不能作為 out參數傳遞。
classOutReturnExample{staticvoidMethod(outinti,outstrings1,outstrings2){i=44;s1="I'vebeenreturned";s2=null;}staticvoidMain(){intvalue;stringstr1,str2;Method(outvalue,outstr1,outstr2);//valueisnow44//str1isnow"I'vebeenreturned"//str2is(still)null;}}