位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 參數(shù)和返回值與全局?jǐn)?shù)據(jù)

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

如何通過全局?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ò)。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部