亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#函數中的out的作用是什么?

C#函數中的out的作用是什么?

Git
POPMUISE 2019-02-04 10:06:05
我看的C#入門經典,其中講到函數中的ref和out!ref我明白,但是out的作用是什么? 我不太明白有個例子:static int MaxValue(int[] intArray, out int maxIndex) {int maxval = intArray[0];maxIndex = 0;for (int i = 1; i < intArray.Length; i++) { if(maxval<intArray[i]){maxval = intArray[i];maxIndex = i;}}return maxval;}static void Main(string[] args){int[] Myarray = { 1, 13, 3131, 4353, 2323, 23123, 2322 };int Mymaxindex;Console.WriteLine("最大值是:{0}",MaxValue(Myarray,out Mymaxindex));Console.WriteLine("最大值的下標是:{0}", Mymaxindex+1);Console.ReadKey();}但是把out都換成ref,結果都是一樣的!Ref和Out到底有什么區別?
查看完整描述

4 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

out 不需要初始化
ref需要初化,我看到的書上就是這么寫的
就是說你調用那個函數時,對應于out修飾的參數,不需要初始化,面ref需要如下例子:
void example(out int x); //聲明
void dddd(ref int y); //聲明
int main()
{
int m=0, n;
example(n); //這個參數不需要初始化
dddd(m); //一定得初始化
}

查看完整回答
反對 回復 2019-03-14
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

1.out 不需要初始化
2.綜述:

c#的變量聲明 和使用 必須是 例如:int a =5; 這樣a才可以被使用
如果是:int b ; b除非被賦值,否則使用他的地方有一個編譯時的錯誤。
out 相對于ref ,out修飾的參數,可以像b一樣,不用被賦值,而直接代到方法的參數中去,但在方法中,帶有out修飾符的,必須首先被賦值。
ref,要想a一樣,必須 先被賦值才能代到方法的參數中去,要不然,有一個編譯時的錯誤。
out同ref一樣,都是有一級地址傳遞的,也就是,帶有這兩個修飾符的參數,如果被修改了原來的值,將以新的值作為它的值.



查看完整回答
反對 回復 2019-03-14
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

在C# 中,既可以通過值也可以通過引用傳遞參數。通過引用傳遞參數允許函數成員更改參數的值,并保持該更改。若要通過引用傳遞參數, 可使用ref或out關鍵字。ref和out這兩個關鍵字都能夠提供相似的功效,其作用也很像C中的指針變量。它們的區別是:

1、使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。

2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。

3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。

注:在C#中,方法的參數傳遞有四種類型:傳值(by value),傳址(by reference),輸出參數(by output),數組參數(by array)。傳值參數無需額外的修飾符,傳址參數需要修飾符ref,輸出參數需要修飾符out,數組參數需要修飾符params。傳值參數在方法調用過程中如果改變了參數的值,那么傳入方法的參數在方法調用完成以后并不因此而改變,而是保留原來傳入時的值。傳址參數恰恰相反,如果方法調用過程改變了參數的值,那么傳入方法的參數在調用完成以后也隨之改變。實際上從名稱上我們可以清楚地看出兩者的含義--傳值參數傳遞的是調用參數的一份拷貝,而傳址參數傳遞的是調用參數的內存地址,該參數在方法內外指向的是同一個存儲位置。

方法參數上的 ref 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。

若要使用 ref 參數,必須將參數作為 ref 參數顯式傳遞到方法。ref 參數的值被傳遞到 ref 參數。

傳遞到 ref 參數的參數必須最先初始化。將此方法與 out 參數相比,后者的參數在傳遞到 out 參數之前不必顯式初始化。

屬性不是變量,不能作為 ref 參數傳遞。

如果兩種方法的聲明僅在它們對 ref 的使用方面不同,則將出現重載。但是,無法定義僅在 ref 和 out 方面不同的重載。

out

方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。

當希望方法返回多個值時,聲明 out 方法非常有用。使用 out 參數的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數。

若要使用 out 參數,必須將參數作為 out 參數顯式傳遞到方法。out 參數的值不會傳遞到 out 參數。

不必初始化作為 out 參數傳遞的變量。然而,必須在方法返回之前為 out 參數賦值。

屬性不是變量,不能作為 out 參數傳遞。



查看完整回答
反對 回復 2019-03-14
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

out是傳出參數,里面可以執行一個方法,out后面的數接收并返回
比如說你寫一個方法返回list,可以在里面寫一個查詢總條數的方法,用out返回,然后在最后還可以返回一個list
ref就是傳入參數
比如說你傳入pageSize,和pageIndex參數,在方法上定義了一個ref int total,你就可以在里面寫 total=pageSize+pageIndex;
這個total就是你傳入的變量值

查看完整回答
反對 回復 2019-03-14
  • 4 回答
  • 0 關注
  • 711 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號