2

例として、次の C# 関数を取り上げます。

    static void Main(string[] args)
    {
        var r = new Random();
        {
            var i = r.Next(); ;
            Console.WriteLine("i = {0}", i);
        }

        var action = new Action(delegate()
            {
                var i = r.Next();
                Console.WriteLine("Delegate: i = {0}", i);
            });
        action();
    }

次のブロックは、この SO Question で説明されているように、ソース コードに変数スコープの追加レイヤーを適用するための C# シンタックス シュガーとしてのみ存在します。

        {
            var i = r.Next(); ;
            Console.WriteLine("i = {0}", i);
        }

生成されたアセンブリを ILSpy で逆コンパイルし、これを取得することでこれを証明しました。

    private static void Main(string[] args)
    {
        Random r = new Random();
        int i = r.Next();
        Console.WriteLine("i = {0}", i);
        Action action = delegate
        {
            int j = r.Next();
            Console.WriteLine("Delegate: i = {0}", j);
        }
        ;
        action();
    }

では、この C# コンストラクトには名前がありますか? もしそうなら、それは何ですか?

4

2 に答える 2

6

ステートメント ブロックと呼ばれます。

実際には、たとえば an の後if (...)のステートメント ブロックと、独立したステートメント ブロックの間に違いはありません。ステートメント ブロックは、ステートメントを使用できる場所ならどこでも使用できます。

于 2012-07-08T22:20:57.767 に答える
2

その特定のコンテキストで使用される { } の特定の名前は知りませんが、それらが導入するものの名​​前はネストされたスコープと呼ばれます。( gotoのドキュメントでネストされたスコープの使用法も参照してください)。

于 2012-07-08T22:20:46.803 に答える