C#| C#変数(ローカル変数)の宣言とスコープ

グローバル変数はMain関数で宣言されることが多く、そのスコープはコード全体です。ローカル変数は、変数が宣言されているブロックステートメントまたはメソッドの最後にある中括弧({})を閉じる前にスコープ内に存在します。この記事では、いくつかのデモを借用して、C#での変数宣言とスコープの関係を示します。
ケース1:変数にあいまいさが含まれている

変数スコープの原則(変数を宣言するブロックステートメントまたはメソッドの閉じ中括弧({})の前のスコープにローカル変数が存在する)によれば、最初の変数jはforループの開始前に定義されます。 scopeはMain()メソッドです。2番目の変数のスコープはforループ内にあります。最初の変数jのスコープには、2番目のjのスコープが含まれます。コンパイラーはこれら2つの変数を区別できないため、コンパイラーにはあいまいさがあり、2番目の変数を宣言することはできません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            int j = 20;//在Main中定义j为全局变量
            for(int i=0; i<10; i++)
            {
    
    
                int j = 30;//在for循环中定义j为局部变量,但两者同为Main中,产生了包含与被包含的关系,顾报错。
                Console.WriteLine(j);
            }
        }
    }
}
ケース2:変数が「クラスレベルの変数」にアップグレードされる

C#には、変数間の基本的な違いがあります。クラスレベルで宣言された変数はフィールド(メンバー変数)と見なされ、メソッドで宣言された変数はローカル変数と見なされます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    
    
    class Program
    {
    
    
        public int j = 20;//在Main外声明了一个类级变量
        static void Main(string[] args)
        {
    
    
            int j = 30;//在Main函数中定义了一个Main中的变量
            Console.WriteLine(j);//执行主函数Main,打印Main中的j
            return;
        }
    }
}
状況3:main関数でクラスレベルの変数を参照する

ケース2の場合、最初のjがpublicを介してMain関数に定義される前に、クラスレベル変数に「アップグレード」され(今回はローカル変数に属します)、クラスレベル変数の適用は次の方法で実現できます。次の方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    
    
    class Program
    {
    
    
        public int j = 20;
        static void Main(string[] args)
        {
    
    
            int j = 30;
            Console.WriteLine(j);
            Program obj = new Program();//new创建对象
            Console.WriteLine("类级变量是:" + obj.j);//调用方法,引用类级变量j
            return;
        }
    }
}
状況4:静的宣言によりクラスレベルの変数が導入される

フィールドを静的として宣言することを選択した場合、呼び出し時にクラスレベルの変数を直接導入できます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    
    
    class Program
    {
    
    
        static int j = 20;//static声明
        static void Main(string[] args)
        {
    
    
            int j = 30;
            Console.WriteLine(j);
            //Program obj = new Program();
            Console.WriteLine("类级变量是:" + Program.j);//可直接调用
            return;
        }
    }
}

おすすめ

転載: blog.csdn.net/weixin_44421798/article/details/104524676
おすすめ