C#の静的および非サティック クラス メンバーとは何ですか?

すべてのフィールド、メソッド、コンストラクター、プロパティ、イベント、およびインデクサーは、クラス メンバーとして知られています。メンバには、静的と非静的の 2 種類があります。静的メンバーには、それらの前に Static キーワードが含まれています。静的フィールド、静的メソッド、静的コンストラクターなどを使用できます。新しいオブジェクトが作成されるたびにメンバーの値が変化しない場合は、そのメンバーを静的にすることができます。そうしないと、メモリ内に同じメンバーの複数のコピーを作成することになり、メンバーのタイプによってはより多くのメモリを消費します。

メンバーを静的にすると、作成するすべてのオブジェクトで共有されます。作成するオブジェクトの数に関係なく、メモリ内には常に Static メンバーのコピーが 1 つだけ存在します。このキーワードは非静的メンバーの前でしか使用できないため、静的メンバーの前でこのキーワードを使用することはできません。このキーワードを使用する代わりに、その前にクラス名を使用して (ClassName.StaticMember) にアクセスできます。オブジェクトレベルでのアクセスが許可されていないため、静的メンバーがパブリックであり、別のクラスからアクセスしたい場合は、同じケースに従う必要があります。すべての非静的メンバーは、オブジェクト レベルでのみアクセスできます。以下の図は、非静的の場合、2 つのオブジェクトがアクセスしたい同じメンバーの 2 つのコピーを指しているが、そのメンバーをマークすると、それらの 2 つのオブジェクトがそのメンバーの 1 つのコピーのみを指すことを示しています。

他のすべての Class メンバーと同様に、Constructor も Static にすることができます。静的コンストラクターは、基本的に静的メンバーを初期化するために使用されます。デフォルトではプライベートであり、パラメーターもとらないため、その前にアクセス修飾子を使用することはできません。静的コンストラクターは、オブジェクトまたはインスタンス レベルのコンストラクターの前でも自動的に呼び出され、そのクラスのオブジェクトをいくつ作成しても、一度だけ呼び出されます。 Student クラスのオブジェクトを作成し、Static コンストラクターが自動的に呼び出され、Static フィールドを初期化する非常に良い例を以下に示します。

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

namespace Hello
{
    class Student
    {
        static string _studentname;
        static string _teachername;

        static Student()
        {
            _studentname = "Albert Pinto";
        }

        public Student(string name)
        {
            _teachername = name;
        }


        public void PrintName()
        {
         
            Console.WriteLine(_studentname);
            Console.WriteLine(_teachername);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Student S = new Student("Mark Johnson");
            S.PrintName();
        }
    }
}