C 引用引數和輸出引數的區別

2021-08-31 16:53:39 字數 1288 閱讀 9763

[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 值引數 引用引數和輸出引數

一 值引數 在使用引數時,是把乙個值傳遞給函式使用的乙個變數。對函式中此變數的任何修改都不會影響函式呼叫中指定的引數。由於函式只有乙個返回值,不能用作引數的多個變數值 二 引用引數 即函式處理的變數與函式呼叫中使用的變數相同,而不僅僅是值相同的變數。因此,對這個變數的任何改變都會影響用作引數的變數值...