|
|
|
|
|
關(guān)于C#中out
和ref
的用法及區(qū)別,在前面的文章中曾介紹過。
在本文中,我將進(jìn)一步詳述C#中out
和ref
有哪些差異,以及它們都有哪些優(yōu)勢。
C#中的ref關(guān)鍵字是什么?
ref
是一個關(guān)鍵字,指示變量何時是另一個對象或引用的別名。以下是使用關(guān)鍵字ref
的5種場景(根據(jù) Microsoft 的說法):
ref
結(jié)構(gòu)或一個只讀的 ref
結(jié)構(gòu)。ref
結(jié)構(gòu)聲明中聲明一個字段是一個引用。我們?nèi)绾问褂藐P(guān)鍵字ref
明確地定義方法? 讓我們看一個來自微軟的例子:
void Method(ref int refArgument)
{
refArgument = refArgument + 44;
}
int number = 1;
Method(ref number);
Console.WriteLine(number);
// Output: 45
可以看到,在將實(shí)參傳遞給 ref
參數(shù)的情況下,必須預(yù)先初始化它。
C#中的out關(guān)鍵字是什么?
out
是通過引用傳遞參數(shù)的關(guān)鍵字。要理解,對參數(shù)執(zhí)行的所有操作總是對參數(shù)執(zhí)行。
一般用在必須返回多個值的方法中,雖然這個參數(shù)不傳遞屬性。
要使用此參數(shù),我們必須在定義方法時以及在被調(diào)用方法中顯式使用關(guān)鍵字out
。讓我們看一下這個例子:
int initializeInMethod;
OutArgExample(out initializeInMethod);
Console.WriteLine(initializeInMethod); // 現(xiàn)在值是44
void OutArgExample(out int number)
{
number = 44;
}
可以看到,out
不要求變量在傳遞到方法之前進(jìn)行初始化,此外, out
只能用于在方法內(nèi)部聲明的變量。
C#中out和ref的差異
清楚了各個關(guān)鍵字的作用之后,我們再來看看兩者的區(qū)別:
ref
時,必須在將參數(shù)傳遞給ref
之前對其進(jìn)行初始化,而使用out
就沒有必要初始化它。out
時,必須在將參數(shù)返回給調(diào)用方法之前為參數(shù)賦值,而使用ref
這不是必需的。ref
可以雙向傳遞數(shù)據(jù)。而out
是不行的,只能從被調(diào)用方法到調(diào)用方法。ref
很有用。out
很有用。ref和out哪個更具優(yōu)勢?
使用ref
相對于out
沒有明顯的優(yōu)勢 ,反之亦然。這實(shí)際上取決于具體情況以及你要使用代碼實(shí)現(xiàn)的目標(biāo)。一般來說:
ref
是一個不錯的選擇。out
是一個不錯的選擇。ref
參數(shù)必須在傳遞給方法之前進(jìn)行初始化,而 out
參數(shù)則不必進(jìn)行初始化,這意味著當(dāng)在調(diào)用方法之前不知道參數(shù)的確切值時,可以使用out
參數(shù)。使用ref有什么好處?
雖然我們剛才看到了一些好處,但讓我們在這里回顧一下關(guān)鍵字ref
:
使用ref
的另一個好處是它可以提高代碼的性能。當(dāng)你通過引用傳遞一個變量時,該方法可以直接訪問該變量,而不必復(fù)制該變量。這可以節(jié)省時間和內(nèi)存,尤其是在變量很大的情況下。
使用out有什么好處?
使用關(guān)鍵字out
有幾個好處:
使用out
的另一個好處是它可以幫助減少您需要編寫的代碼量。例如,如果你有一個需要返回兩個值的方法,你可以使用out
返回兩個值,而不必為每個值創(chuàng)建一個單獨(dú)的方法。
總結(jié)
本文介紹了C#中out
和ref
有哪些差異,以及它們各自的優(yōu)勢,希望通過本文,你對ref
和out
關(guān)鍵字有更多的了解。
參考文章
相關(guān)文章