一丶與ref關鍵字一樣,out關鍵字也是按引用來傳遞的.out 關鍵字會導致引數通過引用來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變數必須在傳遞之前進行初始化。若要使用 out 引數,方法定義和呼叫方法都必須顯式使用 out 關鍵字
儘管作為 out 引數傳遞的變數不需要在傳遞之前進行初始化,但需要呼叫方法以便在方法返回之前賦值。
我們發現,ref和out似乎可以實現相同的功能.因為都可以改變傳遞到方法中的變數的值.但是,二者本質的區別就是,ref是傳入值,out是傳出值.在含有out關鍵字的方法中,變數必須由方法引數中不含out(可以是ref)的變數賦值或者由全域性(即方法可以使用的該方法外部變數)變數賦值,out的宗旨是保證每乙個傳出變數都必須被賦值
示例演示了out關鍵字的使用方法,其功能是獲取陣列中的最大值和最大值的索引
1using
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 引數傳遞。
二丶
1view codeusing
system;
2using
system.collections.generic;
3using
system.text;45
namespace
sampsong614
15static
void
main(string args)
1624
}25 }
1view codestatic
void method(out
inti)25
static
void
main()
6
ref 和 out 關鍵字在執行時的處理方式不同,但在編譯時的處理方式相同。因此,如果乙個方法採用 ref 引數,而另乙個方法採用 out 引數,則無法過載這兩個方法。例如,從編譯的角度來看,以下**中的兩個方法是完全相同的,因此將不會編譯以下**:
class如果乙個方法採用 ref 或 out 引數,而另乙個方法不採用這兩類引數,則可以進行過載,如下所示:class
program
public
void testmethod(ref
inti)
}
public屬性不是變數,因此不能作為 out 引數傳遞。void testmethod(int
i)
public
void testmethod(out
inti)
有關傳遞陣列的資訊,請參見使用 ref 和 out 傳遞陣列。
當希望方法返回多個值時,宣告 out 方法很有用。使用 out 引數的方法仍然可以將變數用作返回型別(請參見 return),但它還可以將乙個或多個物件作為 out 引數返回給呼叫方法。此示例使用 out 在乙個方法呼叫中返回三個變數。請注意,第三個引數所賦的值為 null。這樣便允許方法有選擇地返回值。
1view codeclass
program29
static
void
main()
1015 }
三丶yield
1. yield必須出現在ieunmerable中
2. yield是迭代器的狀態機,能做到延遲查詢,使用的時候才查詢,可以實現按序載入
四丶ref和out
本文中說的ref和out都是引用傳遞,ref的重點是把值傳給呼叫方法,out則是得到呼叫方法的值,類似於有返回型別的方法返回的值;
在使用兩者時一定要注意一下兩點,否則編譯出現錯誤
a) ref 變數使用前要先宣告同時要賦值 a=20;
b)方法呼叫引數要加上相應的關鍵字 ref or out;
staticvoid
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文件實際上有點 只有在已知的情況下才會清楚 也就是說,它是正確的,但只有你已經理解了這個概念才真正有意義.這是我如何看待...