技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

詳述C#中out和ref有哪些差異及優(yōu)勢

作者:admin    時間:2023-5-7 10:49:13    瀏覽:

關(guān)于C#中outref的用法及區(qū)別,在前面的文章中曾介紹過。

在本文中,我將進(jìn)一步詳述C#中outref有哪些差異,以及它們都有哪些優(yōu)勢。

C#中的ref關(guān)鍵字是什么?

ref是一個關(guān)鍵字,指示變量何時是另一個對象或引用的別名。以下是使用關(guān)鍵字ref的5種場景(根據(jù) Microsoft 的說法):

  • 在結(jié)構(gòu)聲明中聲明一個 ref 結(jié)構(gòu)或一個只讀的 ref 結(jié)構(gòu)。
  • ref 結(jié)構(gòu)聲明中聲明一個字段是一個引用。
  • 通過方法簽名和方法調(diào)用中的引用為方法提供參數(shù)。
  • 通過方法簽名中的引用將值返回給調(diào)用者。
  • 指定引用返回值保存在本地作為調(diào)用者想要在成員主體中更改的引用,甚至指定局部變量引用另一個值。
     

我們?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)用方法。
  • 當(dāng)被調(diào)用的方法也需要修改傳遞參數(shù)時, ref很有用。
  • 當(dāng)你需要從一個方法返回多個值時, out很有用。

ref和out哪個更具優(yōu)勢?

使用ref相對于out沒有明顯的優(yōu)勢 ,反之亦然。這實(shí)際上取決于具體情況以及你要使用代碼實(shí)現(xiàn)的目標(biāo)。一般來說:

  • 當(dāng)你需要將變量傳遞給方法并且希望能夠在方法內(nèi)部修改變量時,ref是一個不錯的選擇。
  • 當(dāng)你需要將變量傳遞給方法并且想要在方法內(nèi)部初始化變量時,out是一個不錯的選擇。
  • 另一件需要考慮的事情是 ref 參數(shù)必須在傳遞給方法之前進(jìn)行初始化,而 out 參數(shù)則不必進(jìn)行初始化,這意味著當(dāng)在調(diào)用方法之前不知道參數(shù)的確切值時,可以使用out參數(shù)。

使用ref有什么好處?

雖然我們剛才看到了一些好處,但讓我們在這里回顧一下關(guān)鍵字ref

  • 允許你通過引用傳遞變量,這意味著可以在方法內(nèi)部修改變量。
  • 當(dāng)你需要將變量傳遞給方法并且希望能夠在方法內(nèi)部修改變量時,這是一個不錯的選擇。

使用ref的另一個好處是它可以提高代碼的性能。當(dāng)你通過引用傳遞一個變量時,該方法可以直接訪問該變量,而不必復(fù)制該變量。這可以節(jié)省時間和內(nèi)存,尤其是在變量很大的情況下。

使用out有什么好處?

使用關(guān)鍵字out有幾個好處:

  • 允許你通過引用傳遞變量,但變量在傳遞到方法之前不必進(jìn)行初始化。
  • 只能用于在方法內(nèi)部聲明的變量。
  • 當(dāng)你需要將變量傳遞給方法并且想要在方法內(nèi)部初始化變量時,這是一個不錯的選擇。

使用out的另一個好處是它可以幫助減少您需要編寫的代碼量。例如,如果你有一個需要返回兩個值的方法,你可以使用out返回兩個值,而不必為每個值創(chuàng)建一個單獨(dú)的方法。

總結(jié)

本文介紹了C#中outref有哪些差異,以及它們各自的優(yōu)勢,希望通過本文,你對refout關(guān)鍵字有更多的了解。

參考文章

相關(guān)文章

標(biāo)簽: asp.net  CSharp  ref  out  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */