c 中關鍵字ref與out的區別

2021-08-21 09:39:59 字數 2297 閱讀 2727

一、關鍵字ref的使用:

static void main(string args)

private static void change(string temp)

private static void changebyref(ref string temp)

輸出結果:

aa--refchanged

● 在change()方法中,雖然改變了temp的值,但方法沒有返回值,輸出temp依然是初始值a;

● 在chnagebyref()方法中,由於加上了關鍵字,雖然也沒有返回值,當改變temp的值後,temp的引用位址發生了改變,再次輸出, temp的值為新的引用位址對應的值。

class program

;console.writeline("初始年齡是:", p.age);

changeage(p);

console.writeline("改變pet的屬性值後,年齡是:", p.age);

changeagebyref(ref p);

console.readkey();

}private static void changeage(pet p)

private static void changeagebyref(ref pet p);}

}public class pet

}

輸出結果:

初始年齡是:5

改變pet的屬性值後,年齡是:10

● 在changeage()方法中,改變的是pet例項的屬性值。

● 在changeagebyref()方法中,改變的pet例項的引用位址。

● 使用帶ref的方法之前,需要給方法參變數賦上初始值

● 無論是定義方法還是使用方法,都要帶上關鍵字ref

二、關鍵字ref與out的區別

1.兩者都是按位址傳遞的,使用後都將改變原來引數的數值。ref是傳遞引數的位址,out是返回值。

2.使用ref前必須對變數賦值,out不用;進入out的函式時會清空變數,即使變數已經賦值也不行,退出函式時所有out引用的變數都要賦值,ref引用的可以修改,也可以不修改。

例子

using system; 

static void reftest(ref int x, ref int y)

public static void main()

;b=",a,b);

int c=11,d=22;

outtest(out c, out d);

console.writeline("c=;d=",c,d);

//ref test

int m,n;

//reftest(ref m, ref n);

//上面這行會出錯,ref使用前,變數必須賦值

int o=11,p=22;

reftest(ref o, ref p);

console.writeline("o=;p=",o,p);

}  }

輸出結果:

a=1;b=2

c=1;d=2

o=1;p=1

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

1、使用ref型引數時,傳入的引數必須先被初始化。對out而言,必須在方法中對其完成初始化, 必須方法返回之前為 out 引數賦值。

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

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

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

C 中ref與out 關鍵字的區別

首先,我們都知道,ref和out關鍵字生命的引數都是傳址的,那麼二者有區別嗎?使用ref關鍵字時,引數必須先初始化,而out關鍵字則不需要,out關鍵在宣告的關鍵字,在函式中必須被初始化,用 來說明.public void use int t 100 int k refmethod ref t 注意...

C 中關鍵字ref與out的區別

在c 中,ref與out是很特殊的兩個關鍵字。使用它們,可以使引數按照引用來傳遞。總的來說,通常我們向方法中傳遞的是值.方法獲得的是這些值的乙個拷貝,然後使用這些拷貝,當方法執行完畢後,這些拷貝將被丟棄,而原來的值不將受到影響.此外我們還有其他向方法傳遞引數的形式,引用 ref 和輸出 out 有時...

C 中關鍵字ref與out的區別

總的來說,通常我們向方法中傳遞的是值.方法獲得的是這些值的乙個拷貝,然後使用這些拷貝,當方法執行完畢後,這些拷貝將被丟棄,而原來的值不將受到影響.此外我們還有其他向方法傳遞引數的形式,引用 ref 和輸出 out 有時,我們需要改變原來變數中的值,這時,我們可以向方法傳遞變數的引用,而不是變數的值....