|
|
|
|
|
在 C# 中,關(guān)鍵字ref
和out
都用于按引用傳遞參數(shù),但是,兩者之間存在一些差異,理解這一點(diǎn)很重要。
當(dāng)你按值傳遞參數(shù)時(shí),函數(shù)會(huì)獲取參數(shù)值的副本,在函數(shù)內(nèi)部對參數(shù)所做的任何更改都不會(huì)影響參數(shù)的原始值。但是,當(dāng)你通過引用傳遞參數(shù)時(shí),該函數(shù)將獲得對原始參數(shù)內(nèi)存位置的引用,對函數(shù)內(nèi)部參數(shù)所做的任何更改都會(huì)影響參數(shù)的原始值。
關(guān)鍵字ref
用于通過引用傳遞參數(shù),但參數(shù)必須在傳遞之前進(jìn)行初始化。關(guān)鍵字out
用于聲明參數(shù)是輸出參數(shù),這意味著該參數(shù)在傳遞之前不需要進(jìn)行初始化,相反,該函數(shù)負(fù)責(zé)初始化輸出參數(shù)。
下面是演示在 C# 中使用ref
和out
的示例:
class Program
{
static void Main(string[] args)
{
int x = 5;
int y;
// 使用通過引用傳遞的參數(shù)調(diào)用函數(shù)
AddOne(ref x);
Console.WriteLine("x after AddOne(ref x): " + x);
// 使用輸出參數(shù)調(diào)用函數(shù)
MultiplyByTwo(3, out y);
Console.WriteLine("y after MultiplyByTwo(3, out y): " + y);
}
static void AddOne(ref int num)
{
num += 1;
}
static void MultiplyByTwo(int num, out int result)
{
result = num * 2;
}
}
在上面的示例中,我們首先將變量x
初始化為5。然后我們調(diào)用該函數(shù)AddOne
并使用ref
關(guān)鍵字通過引用傳遞x
。AddOne
函數(shù)將x
的值加1,因此當(dāng)我們在函數(shù)調(diào)用后打印x
的值時(shí),我們看到它現(xiàn)在是6。
接下來,我們調(diào)用該函數(shù)MultiplyByTwo
并把傳遞3作為第一個(gè)參數(shù)。我們還聲明了一個(gè)變量y
,并使用關(guān)鍵字out
將其作為第二個(gè)參數(shù)傳遞。MultiplyByTwo
函數(shù)將第一個(gè)參數(shù)乘以2并將結(jié)果分配給result
參數(shù),在我們的例子中就是y
。當(dāng)我們在函數(shù)調(diào)用后打印y
的值時(shí),我們看到它是6,這是3乘以2的結(jié)果。
總之,ref
和out
是 C# 中用于通過引用傳遞參數(shù)的有用關(guān)鍵字,然而ref
用于傳遞一個(gè)已經(jīng)初始化的參數(shù),而out
用于聲明一個(gè)輸出參數(shù),在傳遞前不需要初始化。
參考文章:
相關(guān)文章