這篇文章主要給大家介紹了關於c#中out引數、ref引數與值引數的用法及區別的相關資料,
文中通過示例**介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,
需要的朋友們下面隨著小編來一起學習學習吧
前言
c#方法中引數型別
有4種引數型別,有時候很難記住它們的不同特徵,下圖對它們做乙個總結
值引數
在使用引數時,把乙個值傳遞給函式使用的乙個變數。
在函式中對此變數的任何修改都不影響函式呼叫中指定的引數。
如下面的函式,是使函式是使傳遞過來的引數值加倍,並顯示出來:
static
void
showdouble(
int
num)
"
, num);
}
引數num在函式中被加倍,如果按以下方式呼叫它:
int
num = 5;
console.writeline(
"num="
, num);
showdouble(num);
console.writeline(
"num="
, num);
輸出到控制台的文字如下所示:
把num作為引數,呼叫showdouble()
並不影響mian()
中num的值,即使把num值加倍之後再賦值給num,在函式呼叫完之後num的值還是不會變。
這也沒什麼問題。
但是如果我們想改變num的值呢?我們會想到使用為num返回新值的函式:
static
int
doublenum(
int
num)
然後呼叫:
int
num = 5;
console.writeline(
"num="
, num);
num = doublenum(num);
console.writeline(
"num="
, num);
ref引數
int
num = 5;
console.writeline(
"num="
, num);
showdouble(
ref
num);
console.writeline(
"num="
, num);
執行控制台結果如下:
用作ref的引數的變數有兩個限制:
1.函式可能會改變引用引數的值,所以必須在函式呼叫中使用「非常量」變數,所以下面的**是不被允許的:
const
int
num = 5;
console.writeline(
"num="
, num);
showdouble(
ref
num);
console.writeline(
"num="
, num);
2.必須使用初始化過的變數。c#不允許假定ref引數在函式呼叫時初始化,下面的**也是不被允許的:
int
num;
console.writeline(
"num="
, num);
showdouble(
ref
num);
console.writeline(
"num="
, num);
輸出引數(out)
除了ref外,還可以指定out關鍵字,指定所給的引數時乙個輸出引數,out引數和ref引數都在函式定義和函式呼叫中作為引數的修飾符。事實上,它的執行方式與ref引數幾乎完全一樣,因為在函式執行完畢後,該引數的值將返回給函式呼叫中使用的變數。但是,二者存在一些重要區別:
1.把未賦值的變數用作ref引數是非法的,但是未賦值的變數可以用作out引數
2.在函式中使用out引數時,必須將其看成尚未賦值。也就是說呼叫**可以把已賦值的變數用作out引數,但在函式執行時該變數的值會丟失。
如現在有乙個返回陣列中最大值得max()
函式,獲取陣列中最大值得元素索引(這裡假設如果有多個最大值,只返回第乙個最大值索引),新增out引數:
?static
int
max(
int
intarray,
out
int
maxindex)
}
return
maxval;
}
呼叫上面的**:
int
myarray = ;
int
maxindex;
console.writeline(
"the maxium value is "
, max(myarray,
out
maxindex));
console.writeline(
"the index of the maxium value is"
, maxindex + 1);
控制台輸出的結果如下所示:
總結
C 中out引數 ref引數與值引數的用法及區別
這篇文章主要給大家介紹了關於c 中out引數 ref引數與值引數的用法及區別的相關資料,文中通過示例 介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧 前言 c 方法中引數型別 有4種引數型別,有時候很難記住它們的不同特徵,下圖對它們做乙個總結 值...
C 中ref引數及out引數對比
ref 關鍵字和out關鍵字均會導致引數通過引用來傳遞 相同點1 這是兩者的共同點。通過引用傳遞引數,會使方法中對引數所做的任何修改都將反映在該變數中。兩者還有乙個共同點,那就是 若要使用 ref 引數或out引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字或out關鍵字 相同點2 那兩者有...
ref引數和out引數
引數對於每個學習程式設計的人都很清楚,在任何程式中都不可能沒有引數,下面我就說說乙個特殊的引數型別,其實這個也不算什麼特殊引數了,在c 中已經沒有像c中那樣的指標的概念了,但是有的時候有些時候要寫特殊的處理,其實c 中並不是完完全全放棄這個概念的,下面就寫下這類特殊的引數。引用引數ref 當乙個引數...