ref引數和out引數

2021-09-30 10:28:41 字數 1633 閱讀 7926

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

引用引數ref

當乙個引數帶有ref修飾符時候這個引數就是乙個引用引數。引用引數本身並不建立新的儲存空間的。

引用引數指向函式子句呼叫中作為引數給出的相關變數表徵的儲存空間,所以此引數的值就等於它所指向的變數。修過c的人這個應該很容易明白的。

下面是關於引用引數的賦值規則:

1、在乙個變數被傳遞給函式子句呼叫中相關引用引數之前,它自身必須被明確賦值;

2、在函式子句界定的範圍內,引用引數被認為是初始化過的

輸出引數out:

帶有out修飾符的引數為輸出引數。和引用引數一樣out引數本身並不建立新的儲存空間,輸出引數指向函式子句呼叫中作為引數給出的相關變數表徵的儲存空間。這樣,此輸出引數的數值總是等於它所指向的變數。

下面時關於輸出引數的賦值規則:

1、在乙個變數被傳遞給函式子句呼叫中相關輸出引數之前,它自身不需要被明確地賦值(這個是和引用引數不同的,要特別注意);

2、在函式子句呼叫中,每個被傳遞給輸出引數的變數被認為在該執行路徑中已被賦值;

3、在函式子句界定的範圍內,輸出引數被認為是初始化過的

4、在函式子句返回之前,每乙個輸出引數必須被明確地賦值(這一點也要特別注意)

在結構體型別的建構函式中,關鍵字this就象是此結構體型別的輸出引數

下面看乙個列子具體來說說這個引用和輸出引數:

public static void refandoutparam(ref int refparam, out int outparam)

錯誤1 控制離開當前方法之前必須對 out 引數「outparam」賦值d:\_net\conv_logs_process\c_sharp\program.cs2228 c_sharp

上面就是在方法結束之前未對out引數複製,系統就會提示這種錯誤;

class program

}class myclass

}錯誤1 與「c_sharp_wbb.myclass.refandoutparam(ref int, out int)」最匹配的過載方法具有一些無效引數d:\_net\conv_logs_process\c_sharp\program.cs1413 c_sharp

錯誤2引數 1 必須使用關鍵字「ref」傳遞d:\_net\conv_logs_process\c_sharp\program.cs1437 c_sharp

錯誤3引數 2 必須使用關鍵字「out」傳遞d:\_net\conv_logs_process\c_sharp\program.cs1447 c_sharp

特別注意,引用帶有引用引數和輸出引數的方法時候,必須加上ref和out;

class program

}class myclass

}錯誤1 使用了未賦值的區域性變數「refparam」d:\_net\conv_logs_process\c_sharp\program.cs1440 c_sharp

上面是對ref引數為被明確賦值;

class program

}class myclass

}上面這段**輸出

使用ref和out引數

ref型別引數側重修改,out型別引數側重輸出 ref在傳入值之前必須先初始化 out在函式內,函式結束之前,即傳出值之前初始化.eg protected void page load object sender,eventargs e int indexref 1 testref ref inde...

使用ref和out引數

通過ref和out關鍵字,可以以引用的方式傳遞任何型別的值。這樣做,將允許改變呼叫過程中使用的實參值。在研究ref和out的機制之前,首先有必要理解為什麼需要以引用方式來傳遞值型別。通常有兩個原因 使方法能改變其實參的值或者允許方法有多個返回值。ref引數修飾符使得c 可以建立按引用呼叫,而不是按值...

out引數和ref引數的區別

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