3

C# の場合 - オプションのパラメーター - 他の提供されていないパラメーターへの補完を作成します。

だから私が書くと:

void Go(int a, bool isFalse = true)

そして電話するGo(a)

実際には il コードを出力しGo(a, true)ます。

名前付きパラメーターについてはどうですか? また、順序の切り替えは舞台裏でどのように機能しますか?

例えば ​​:

  Go(isFalse:true, a:1) //order has been switched.
4

3 に答える 3

3

たとえば、このようなものがある場合

void Go ( int a , bool isFalse, bool isEmpty)

あなたの呼び出しの後、Go(1,isEmpty : true, isFalse : false)このような関数呼び出しが生成されます

Go ( 1, false, true)
于 2012-12-17T11:10:15.880 に答える
2

呼び出すGo(a)と、Go(a, true)notが呼び出されますGo(a, false)。例えば;

using System;

namespace Programs
{
    public class Program
    {      
        public static void Main(string[] args)
        {
            Go(5);
        }

        static void Go(int a, bool isFalse = true)
        {
            Console.WriteLine("Int is {0}, Boolean is {1}", a, isFalse);
        }
    }
}

出力は次のとおりです。

Int は 5、Boolean は True

呼び出されたときに使用されていない場合は、isFalse値を設定しています。trueただし、順序を気にする場合は、メソッドで記述した順序を使用する必要があります。例えば;

のような方法があれば

SomeMethod(bool isFalse, bool isFull, bool isStacked)

このメソッドを次のように呼び出すと、

SomeMethod(true, false, true)

あなたの方法は次のように機能します

isFalse = trueisFull = falseおよびisStacked = true

順番だから。ただし、メソッドに順序を混在させることができる多くのパラメーターがある場合は、に付属の名前付きパラメーターを使用できますC# 4.0。どのベースの同じ方法でも、次のようにすることができます。

SomeMethod(isStacked: true, isFull: false, isFalse = true)

に等しい呼び出しです

SomeMethod(true, false, true)

于 2012-12-17T11:20:30.917 に答える
2

Go(a)にコンパイルされGo(a, true)ます。参照されたライブラリで引数のデフォルト値が変更された場合、呼び出し元のコードを再コンパイルする必要があるという意味があります。

経験則として、名前付き (およびデフォルト) パラメーターは単なるコンパイラのトリックです。ランタイム レベルでの呼び出しルールは、以前のバージョンと同じです。

その結果、呼び出しGo(isFalse = true, a = 1)は実際にコンパイルされてGo(1, true).

于 2012-12-17T11:08:46.530 に答える