[size=large]
ref是傳遞引數的位址,out是返回值,兩者有一定的相同之處,不過也有不同點。
使用ref前必須對變數賦值,out不用。
out的函式會清空變數,即使變數已經賦值也不行,退出函式時所有out引用的變數都要賦值,ref引用的可以修改,也可以不修改。
從clr的角度看,關鍵字out和關鍵字ref是等效的,這就是說,無論使用哪個關鍵字,都會生成相同的元資料和il**。但是,c#編譯器將兩個關鍵字區別對待,在c#中,這兩個關鍵字的區別在於哪個方法負責初始化引用物件。如果方法的引數標記為out,那麼呼叫者不希望在呼叫方法之前初始化物件,被呼叫的方法不能讀取物件的值,而且被呼叫的方法必須在返回之前為物件賦值。如果方法的引數標記為ref,那麼呼叫者必須在呼叫方法之前首先初始化引數的值,被呼叫的方法可以讀取引數或為引數賦值。[/size]
----cite a ****** example
namespace 方法引數
,)", x, y);
//引用引數
point2 p1 = new point2(12, 23);
int x1 = 0, y1 = 0;//引用引數一定要賦初值
p1.getpoint(ref x1, ref y1);
console.writeline("p1(,)", x1, y1);
// 引數陣列
int a = ;
array.f(a);
array.f(10, 20, 30, 60, 50);//f(new int )
array.f();
console.readline();}}
///
/// 輸出引數可返回多個值
///
class point
public void getpoint(out int x, out int y)//輸出引數用於傳遞方法返回的資料。out修飾符後應跟與形參型別相同的型別申明。在方法返回後,傳遞的變數被認為經過了初始化。
}///
/// 引用引數
///
class point2
public void getpoint(ref int x, ref int y)
}///
/// 引數陣列
///
class array
", args.length);
foreach (int i in args)
", i);
}console.writeline();}}
}
C 引用引數和輸出引數的區別
從clr的角度看,關鍵字out和關鍵字ref是等效的,這就是說,無論使用哪個關鍵字,都會生成相同的元資料和il 但是,c 編譯器將兩個關鍵字區別對待,在c 中,這兩個關鍵字的區別在於哪個方法負責初始化引用物件。如果方法的引數標記為out,那麼呼叫者不希望在呼叫方法之前初始化物件,被呼叫的方法不能讀取...
C 引用引數和輸出引數的區別
2009 12 27 17 51 59 從clr的角度看,關鍵字out和關鍵字ref是等效的,這就是說,無論使用哪個關鍵字,都會生成相同的元資料和il 但是,c 編譯器將兩個關鍵字 區別對待,在c 中,這兩個關鍵字的區別在於哪個方法負責初始化引用物件。如果方法的引數標記為out,那麼呼叫者不希望在呼...
C 值引數 引用引數和輸出引數
一 值引數 在使用引數時,是把乙個值傳遞給函式使用的乙個變數。對函式中此變數的任何修改都不會影響函式呼叫中指定的引數。由於函式只有乙個返回值,不能用作引數的多個變數值 二 引用引數 即函式處理的變數與函式呼叫中使用的變數相同,而不僅僅是值相同的變數。因此,對這個變數的任何改變都會影響用作引數的變數值...