c中的void和ref到底代表了什麼意思,什麼時候使用

2021-03-22 13:44:41 字數 5431 閱讀 6487

1樓:匿名使用者

一、void 是c#中「無返回值函式"的定義。

eg.public void hello()

public string hello()

你可以看到,兩個都是c#中的函式, 用void宣告的函式體不需要有返回值,而用型別宣告的函式體必須有對應型別的返回值(return ),否則編譯器會報錯。

二、ref關鍵字是用來定義引用變數傳遞的。

c#中的型別分為值型別 和 引用型別。我舉個簡單例子。

void main()

public void sum(int a)

這個void 中,傳入了a,然後對其+1; 但是如果只是這麼寫 執行完sum(a)之後, a還是=1。

因為在void main方法裡, a = 1; 但是他把a傳遞給sum(a)方法時,是傳遞的一個值進去,對於main()方法來說,傳完之後就不再關注這個變數了,所以 a還是一直等於1。

但是將sum方法改為:

public void sum(ref int a)

ref int a 就是告訴編譯器, 這個int型別的變數a,是做引用傳遞的。

如果再用main()呼叫sum方法時, 執行之後 a = 2;

c#中ref和out到底有什麼用?什麼時候會用到呢?我瀏覽了一些資料但都不是很明白。

2樓:君女子

實際應用的時候,ref的物件是值型別。

用ref可以實現兩個目的,第一,方法中的值引數是複製的形式帶入的。所以如果傳入的引數結構很複雜,資料量很大,而且多次呼叫這個方法,就會導致記憶體消耗大。此時用ref,傳遞的只是指標,而不是整個資料,就可以避免這種消耗。

第二,如果希望這個值型別在這個方法中的所有修改和賦值都保留,就需要用ref。

out的用法,我經常用在一個方法返回多個型別的資料時。

例如string getstr(string input, out int i)。這個方法最後返回了一個string,還丟擲了一個int的值。

純個人理解。希望能看懂我的意思。

3樓:匿名使用者

class program

static void theotheroperation(out int result)

static void otheropearation(ref int result)

static void operation(int result)}

c#中的「void」有什麼作用?

c#中ref是什麼意思?怎麼運用的?求列子

4樓:匿名使用者

可以理解為類似的傳址引用,同時還有out。

在函式需要外部傳入一個變數名,然後在程式內部可以將這個值進行修改,典型的傳址引用!在定義時必要加ref或out說明!

public void methoda(out string s )

呼叫時,應該先宣告一個字元變數。

string temp;

methoda(out temp);

此時可以列印temp的值會變作"1";

而ref與out基本是類同的,如果在程式中引用原值的話,必須使用ref防止傳入未初始化的值。

public void methodb(ref int s)

因為該函式要使用形參的原值,所以這裡必須使用ref宣告,不要使用out宣告。

使用時,

int temp = 8;

methodb(ref temp);

列印temp的值會變為64。

ref因為對原值進行了引用,所以ref要求傳入的一定是一個初始化後的值,不能是未初始化的值。

int temp;

methodb(ref temp);

//原則上這樣是會錯的,但這裡我使用了一個int,由於在宣告時int temp與int temp =0 是等價的,所以不會出錯,但如果是字串,使用這種方式完全是可以報錯的!因為string temp與string temp ="";是不等價的,你也可理解為必須賦值後才可以使用。

public void methodc(ref string s)

string temp;

methodc(ref temp);//這種就是錯誤的方式。ref要求必須形參已經賦值(初始化)。

string temp = "";

methodc(ref temp);//這種方式就是正確的。

我們定義成員方法時,如果有引用原值使用必須使用ref,防上對方傳入一個未初始化的值,引發程式錯誤,而沒有必要對形參的值有要求時,則儘量使用out,防止呼叫時增加客戶端**量。

c#中的ref用法

5樓:雄哥

可以理解為類似的傳址引用,同時還有out。

在函式需要外部傳入一個變數名,然後在程式內部可以將這個值進行修改,典型的傳址引用!在定義時必要加ref或out說明!

public void methoda(out string s )

呼叫時,應該先宣告一個字元變數。

string temp;

methoda(out temp);

此時可以列印temp的值會變作"1";

而ref與out基本是類同的,如果在程式中引用原值的話,必須使用ref防止傳入未初始化的值。

public void methodb(ref int s)

因為該函式要使用形參的原值,所以這裡必須使用ref宣告,不要使用out宣告。

使用時,

int temp = 8;

methodb(ref temp);

列印temp的值會變為64。

ref因為對原值進行了引用,所以ref要求傳入的一定是一個初始化後的值,不能是未初始化的值。

int temp;

methodb(ref temp);

//原則上這樣是會錯的,但這裡我使用了一個int,由於在宣告時int temp與int temp =0 是等價的,所以不會出錯,但如果是字串,使用這種方式完全是可以報錯的!因為string temp與string temp ="";是不等價的,你也可理解為必須賦值後才可以使用。

public void methodc(ref string s)

string temp;

methodc(ref temp);//這種就是錯誤的方式。ref要求必須形參已經賦值(初始化)。

string temp = "";

methodc(ref temp);//這種方式就是正確的。

我們定義成員方法時,如果有引用原值使用必須使用ref,防上對方傳入一個未初始化的值,引發程式錯誤,而沒有必要對形參的值有要求時,則儘量使用out,防止呼叫時增加客戶端**量。

希望能解決您的問題。

6樓:超大蒲公英

void fun(ref int a)

int i=2;

fun(ref i);

//i=3

c# 中 ref引數到底是什麼 ?該怎麼用?

7樓:匿名使用者

static void main(string args) private static void getval(int x)//這裡只是單純的複製x=0這個變數.傳說中的傳值 private static void getrefval(ref int x)//引數x是1個指向堆疊中值型別為int的指標 //傳說中的傳址

c#程式設計中關鍵字"ref"在什麼時候使用?是在定義函式之後沒有設定返回值的時候使用嗎?它的作用

8樓:匿名使用者

還是以例子來說明吧;

1. ref:

int i =0;

有函式fun(ref i)和fun(i)

它們的函式體都是,那麼在執行以下兩段**62616964757a686964616fe59b9ee7ad9431333264653434後:

(1)int i = 0; fun(i); system.console.writeline(i.tostring());

(2)int i = 0; fun(ref i); system.console.writeline(i.tostring());

(1)的輸出是1,(2)的輸出是3,

2. out:

int i; //注意,這裡只是宣告瞭變數i,並沒有對其初始化

有函式fun(ref i)、fun(out i)和fun(i)

它們的函式體都是,那麼在執行以下三段**後:

(1)int i = 0; fun(i); system.console.writeline(i.tostring());

(2)int i = 0; fun(ref i); system.console.writeline(i.tostring());

(3)int i = 0; fun(out i); system.console.writeline(i.tostring());

(1)和(2)在編譯的時候都會報錯:錯誤 cs0165: 使用了未賦值的區域性變數「i」

而(3)能正常編譯,而且輸出3

對於你的問題,的確,ref和out跟c/c++中的指標很類似,但是ref和out還是有區別的,主要就是在於ref應用的場合是已經有了一個變數了,想在另外一個函式裡頭對其進行修改,這時只能用ref,out的話適用於函式想返回多個值的時候,比如一個函式做某個運算,結果是一個int,但是無論函式執行成功或失敗,它都會返回一個int,但我們在呼叫的時候還想知道函式的執行是否成功了,這個時候就可以用一個這樣的函式:int i; bool fun(out i); 通過fun函式返回的bool值可以知道函式執行是否成功,然後通過out的i我們可以知道函式運算得出的結果,因此一般情況out主要用於一個函式返回多個返回值的時候。

最後總結一下:

ref和out這兩個關鍵字都能夠提供相似的功效,其作用也很像c中的指標變數。稍有不同之處是:

使用ref型引數時,傳入的引數必須先被初始化。而out則不需要,對out而言,就必須在方法中對其完成初始化。

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

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

9樓:匿名使用者

一般來說,在***+的時候用

比如用c#建立一個 word的document的時候

10樓:

ref out 生成的il底層**是抄一樣的。只是c#的編譯襲器區別對待。

ref 修飾引數。可以將值型別作為引用型別傳遞。

本人覺得以下兩種情況可以用

1.對於佔用大記憶體的值型別用引用提高效率。

2.對於函式需要返回多個值的時候,比如int f(ref int i,ref int j) 就能返回3個值型別。

C中的ref和out關鍵字怎麼使用呢

概念你看書就可以了,或者上樓上的解說,我給你兩個例子 ref例子 定義一個方法 public void setvalue ref int count 呼叫方法 int count 10 setvalue ref count console.write count 這裡count為120 out 例子...

概率論中P和C都代表什麼?一樣嗎

p n m n的階乘 m的階乘,求帶有順序問題 求排列的時候用。c n m n的階乘 m的階乘 m n 的階乘,求不帶有順序問題,求組合的時候用 概率中p和c怎麼算的?這兩個的區別是什麼?5 一 排列組合計算方法如下 排列也可以表示成p 排列a n,m n n 1 n m 1 n n m n為下標,...

《小王子》中玫瑰花和小狐狸到底代表著什麼

狐狸狐狸遇見小王子後,要求小王子馴養他,並使小王子明白生活的本質和愛情的真諦。狐狸像是一位智者,點撥小王子,告訴小王子 只有用心才能看得清。實質性的東西,用眼睛是看不見的。並通過在他們倆之間建立馴養關係讓小王子明白愛情是責任。看清他的玫瑰是獨一無二的,因為他為他的玫瑰付出過。狐狸是智慧的象徵,狐狸的...