C 的out引數和ref引數

2021-06-26 23:43:43 字數 1240 閱讀 9062

剛學c#的時候看過out引數和ref引數的用法,但是一直沒有根據實際專案做過。

今天寫webservice介面的時候用到了:

本來我是寫乙個方法查詢乙個資料庫,返回乙個dataset給別人呼叫,沒問題,完成了(我的上篇部落格寫有),但是專案總是變化 的,有人要求同時將dataset的總記錄條數也返回給他們呼叫。本來這也好解決,我想到的有以下幾種方法:

1.給dataset的datatable增加乙個字段,全部存放一樣的內容,即總記錄數。(資料冗餘,他們希望得到更好的解決方法)

2.再寫乙個方法,專門用來獲取總記錄數。(他們想一次呼叫,同時獲得dataset和總記錄條數,而且呼叫兩個方法擔心會不穩定不可靠,這點我也理解)

3.寫乙個過載方法。

上面都是比較笨的解決方案,這裡受乙個c#qq群網友的提示才想到了out引數。(如此簡單方便,以前也看過,竟然需要用的時候沒想到):

public dataset search973data(string dataname, string prodtype, string starttime, string endtime, double dstartlong, double dendlong, double dstartlat, double dendlat, int onpage, int countofperpage,out int totalcount)

{//  ......code......

totalcount=ds.tables[0].rows.count;  //將總條數賦值給out引數返回

//  ......code......

在此簡要回顧一下out和ref引數。

out和ref關鍵字都是修飾引數的,表示是引用傳遞。

它們的區別在於:ref要求引數在傳入之前需要進行初始化,而out則不需要進行初始化。

由於ref引數必須初始化再傳遞,所以在函式內部可以直接使用引數的值。同理,由於out引數在傳遞之前並不保證初始化,所以在函式內初始化該引數之前不能直接使用它的值,傳遞之前i的賦值對函式本身也沒有實際意義。

理論上講,out和ref並沒有嚴格的使用限制。

通常,如果該引數僅僅是作為返回值引數就用out修飾;如果該引數的資料需要參與函式內部運算,則用ref修飾。



ref引數和out引數

引數對於每個學習程式設計的人都很清楚,在任何程式中都不可能沒有引數,下面我就說說乙個特殊的引數型別,其實這個也不算什麼特殊引數了,在c 中已經沒有像c中那樣的指標的概念了,但是有的時候有些時候要寫特殊的處理,其實c 中並不是完完全全放棄這個概念的,下面就寫下這類特殊的引數。引用引數ref 當乙個引數...

out引數和ref引數的區別

out和ref都是在引數傳遞時,傳遞變數的引用。用於希望方法中多個變數值更改後,在方法呼叫後保留更改的值。當乙個方法需要多個返回值時,靠方法返回值就不能勝任,幸好.net有out和ref關鍵字。比如 登入方法,登入結果有成功和失敗,但是如果失敗還要知道原因僅靠返回值就不行了,這個就可以用out和re...

ref和out 傳遞引數 C

1.引數傳遞預設都是傳遞棧空間裡面儲存的內容 2.如果新增了ref那麼傳遞的都是棧空間位址,而不再是棧空間裡面的內容 3.如果新增了out,那麼傳遞的也是棧空間的位址 1 寫乙個方法計算乙個int型別陣列中每個元素的總和以及最大值和最小值 2 3 4 5 6 7static void gatvalu...