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

贊助商

分類目錄

贊助商

最新文章

搜索

[示例]詳解 C# 中的 ref 與 out 的不同

作者:admin    時(shí)間:2023-5-7 9:46:44    瀏覽:

在前文中,我簡(jiǎn)單介紹了C# ref vs out 的區(qū)別,在本文我將繼續(xù)通過(guò)多個(gè)示例來(lái)詳解 C# 中的 ref out 的不同。

C# 中的 refout 關(guān)鍵字用于在方法或函數(shù)中傳遞參數(shù),兩者都表明參數(shù)是通過(guò)引用傳遞的。默認(rèn)情況下,參數(shù)按值傳遞給方法。通過(guò)使用這些關(guān)鍵字(refout),我們可以通過(guò)引用傳遞參數(shù)。

ref 關(guān)鍵字

ref 關(guān)鍵字通過(guò)引用傳遞參數(shù),這意味著當(dāng)控制權(quán)返回到調(diào)用方法時(shí),在方法中對(duì)此參數(shù)所做的任何更改都將反映在該變量中。

示例代碼

public static string GetNextName(ref int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}
static void Main(string[] args)
{
    int i = 1;
    Console.WriteLine("Previous value of integer i:" + i.ToString());
    string test = GetNextName(ref i);
    Console.WriteLine("Current value of integer i:" + i.ToString());
}

輸出

 

out 關(guān)鍵字

out 關(guān)鍵字通過(guò)引用傳遞參數(shù)。這與 ref 關(guān)鍵字非常相似。

示例代碼

public static string GetNextNameByOut(out int id)
{
    id = 1;
    string returnText = "Next-" + id.ToString();
    return returnText;
}
static void Main(string[] args)
{
    int i = 0;
    Console.WriteLine("Previous value of integer i:" + i.ToString());
    string test = GetNextNameByOut(out i);
    Console.WriteLine("Current value of integer i:" + i.ToString());
}

輸出

 

ref 和 out 的主要區(qū)別

ref out
在傳遞給 ref 之前,參數(shù)必須先初始化。 在傳遞給 out 之前,不必初始化參數(shù)。
在返回到調(diào)用方法之前不需要分配或初始化參數(shù)的值(由 ref 傳遞)。 在返回調(diào)用方法之前,被調(diào)用方法需要分配或初始化參數(shù)值(傳遞給out)。
當(dāng)調(diào)用的方法也需要修改傳遞參數(shù)時(shí),通過(guò) ref 傳遞參數(shù)值很有用。 當(dāng)需要從函數(shù)或方法返回多個(gè)值時(shí),向 out 方法聲明參數(shù)很有用。
在調(diào)用方法中使用參數(shù)值之前,不必初始化參數(shù)值。 參數(shù)值必須在使用前在調(diào)用方法中初始化。
當(dāng)我們使用 ref 時(shí),數(shù)據(jù)可以雙向傳遞。 當(dāng)我們使用 out 時(shí),數(shù)據(jù)僅以單向方式傳遞(從被調(diào)用方法到調(diào)用方方法)。
  • refout 在運(yùn)行時(shí)的處理方式不同,而在編譯時(shí)的處理方式相同。
  • 屬性不是變量,因此不能作為 outref 參數(shù)傳遞。

ref/out 關(guān)鍵字和方法重載

refout 在運(yùn)行時(shí)的處理方式不同,而在編譯時(shí)它們的處理方式相同,因此如果一個(gè)方法將參數(shù)作為 ref 而另一個(gè)將參數(shù)作為 out,則不能重載方法。

示例代碼

public static string GetNextName(ref int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}
public static string GetNextName(out int id)
{
    id = 1;
    string returnText = "Next-" + id.ToString();
    return returnText;
}

編譯代碼時(shí)的輸出

 

但是,當(dāng)一個(gè)方法采用 refout 參數(shù)而另一個(gè)方法采用相同的參數(shù)但不帶 refout 時(shí),方法重載是可能的。

示例代碼

public static string GetNextName(int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}
public static string GetNextName(ref int id)
{
    string returnText = "Next-" + id.ToString();
    id += 1;
    return returnText;
}

概括

當(dāng)我們想要在作為參數(shù)傳遞的相同變量中返回一個(gè)值時(shí),outref 關(guān)鍵字很有用。

參考文章:

相關(guān)文章

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