C# 參數(shù)和返回值與全局?jǐn)?shù)據(jù)
如何通過全局?jǐn)?shù)據(jù)以及參數(shù)和返回值與函數(shù)交換數(shù)據(jù)。首先分析下面的代碼:
class Program
{
static void ShowDouble(ref int val)
{
val *= 2;
WriteLine($"val doubled = {val}");
}
static void Main(string[] args)
{
int val =5;
WriteLine($"val = {val}");
ShowDouble(ref val);
WriteLine($"val = {val}");
}
}
將上面的代碼與下面的代碼相比較:
class Program
{
static int val;
static void ShowDouble()
{
val *= 2;
WriteLine($"val doubled = {val}"};
}
static void Main(string[] args)
{
val =5?
WriteLine($"val = {val}");
ShowDouble ();
WriteLine($"val = {val}");
}
}
這兩個(gè)ShowDoubleO函數(shù)的結(jié)果是相同的。
使用哪種方法并沒有什么硬性規(guī)定,這兩種方法都十分有效,但需要考慮如下一些規(guī)則。
首先,在第一次討論這個(gè)問題時(shí)就提到過,使用全局值的ShowDoubleO版本只使用全局變量val。為使用這個(gè)版本,必須使用這個(gè)全局變量。這會(huì)對(duì)該函數(shù)的靈活性有輕微的限制,如果要存儲(chǔ)結(jié)果,就必須總是把這個(gè)全局變量值復(fù)制到其他變量中。另外,全局?jǐn)?shù)據(jù)可能在應(yīng)用程序的其他地方被代碼修改,這會(huì)導(dǎo)致預(yù)料不到的結(jié)果(其值可能會(huì)改變,等我們認(rèn)識(shí)到這一點(diǎn)時(shí)為時(shí)已晚)。
當(dāng)然,也可以說,這種簡化實(shí)際上使代碼更難理解。顯式指定參數(shù)可以一眼看出發(fā)生了什么改變。例如對(duì)于FunctionName(vall,out val2)函數(shù)調(diào)用,馬上就可以知道vail和val2都是要考慮的重要變量,在函數(shù)執(zhí)行完畢后,會(huì)為val2賦予一個(gè)新值。反之,如果這個(gè)函數(shù)不帶參數(shù),就不能對(duì)它處理了什么數(shù)據(jù)做任何假設(shè)。
總之,可以自由選擇使用哪種技術(shù)來交換數(shù)據(jù)。一般情況下,最好使用參數(shù),而不使用全局?jǐn)?shù)據(jù),但有時(shí)使用全局?jǐn)?shù)據(jù)可能更合適,使用這種技術(shù)并沒有錯(cuò)。
點(diǎn)擊加載更多評(píng)論>>