C 當中的out關鍵字 借鑑於CSDN

2022-03-12 18:17:57 字數 3185 閱讀 1407

一丶與ref關鍵字一樣,out關鍵字也是按引用來傳遞的.out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 out 關鍵字

儘管作為 out 引數傳遞的變數不需要在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。

我們發現,ref和out似乎可以實現相同的功能.因為都可以改變傳遞到方法中的變數的值.但是,二者本質的區別就是,ref是傳入值,out是傳出值.在含有out關鍵字的方法中,變數必須由方法引數中不含out(可以是ref)的變數賦值或者由全域性(即方法可以使用的該方法外部變數)變數賦值,out的宗旨是保證每乙個傳出變數都必須被賦值

示例演示了out關鍵字的使用方法,其功能是獲取陣列中的最大值和最大值的索引

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

out_key829

}3031return

m_max;32}

33static

void

main(string args)34;

36int

maxindex;

37 console.writeline("

陣列中最大的值為:

", maxindex(myarray, out

maxindex));

38//

呼叫maxindex方法後 maxindex的值為2

39 console.writeline("

陣列中最大的值是第元素

說明:1.out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於ref 要求變數必須在傳遞之前進行初始化。

2.方法定義和呼叫方法都必須顯式使用 out 關鍵字。

3.屬性不是變數,因此不能作為 out 引數傳遞。

二丶

1

using

system;

2using

system.collections.generic;

3using

system.text;45

namespace

sampsong614

15static

void

main(string args)

1624

}25 }

view code

1

static

void method(out

inti)25

static

void

main()

6

view code

ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:

class

class

program

public

void testmethod(ref

inti)

}

如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載,如下所示:

public

void testmethod(int

i)

public

void testmethod(out

inti)

屬性不是變數,因此不能作為 out 引數傳遞。

有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。 

當希望方法返回多個值時,宣告 out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將乙個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out 在乙個方法呼叫中返回三個變數。請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。

1

class

program29

static

void

main()

1015 }

view code

三丶yield

1. yield必須出現在ieunmerable中

2. yield是迭代器的狀態機,能做到延遲查詢,使用的時候才查詢,可以實現按序載入

四丶ref和out

本文中說的ref和out都是引用傳遞,ref的重點是把值傳給呼叫方法,out則是得到呼叫方法的值,類似於有返回型別的方法返回的值;

在使用兩者時一定要注意一下兩點,否則編譯出現錯誤

a) ref 變數使用前要先宣告同時要賦值 a=20;

b)方法呼叫引數要加上相應的關鍵字 ref or out;

static

void

main()

,b is

",a,b);

outtest(

outc);

console.writeline(

"the out value is .

",c);

}static

void swapmethod(ref

int a,ref

intb)

static

void outtest(out

inta)

out關鍵字的用法

out 上下文關鍵字可在下面兩種上下文中使用 1 作為引數列表中的引數修飾符 2 在介面和委託的泛型型別引數宣告中 1 out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 ...

C ref關鍵字和out關鍵字的區別

1 在不使用關鍵字 比如ref關鍵字 out關鍵字等 修飾函式的情況下,大部分函式的引數是以值傳遞的方式,也就是說,呼叫函式 在使用引數 比如mynumber 時,是把該引數複製多乙份,然後將其傳遞給 被呼叫函式 使用,言外之意就是對 被呼叫函式 中此變數的任何修改都不影響 呼叫函式 中原有引數的值...

c out關鍵字 vb 在c 中使用out關鍵字

任何人都可以建議我確切使用out關鍵字作為引數,以及它如何連線從函式返回多個值,如在post中,我與變數與正常變數混淆.任何人都可以幫助我.解決方法 這經常令人困惑,我認為msdn文件實際上有點 只有在已知的情況下才會清楚 也就是說,它是正確的,但只有你已經理解了這個概念才真正有意義.這是我如何看待...