C#初心者のための基礎!staticスタティックの意味と使い方を解説#25

当サイトではアフィリエイト広告を利用しています。

C#初級プログラミング

staticとは

staticキーワードは静的メンバーを作成するときに使用します。静的メンバーとは、変数や、メソッド等を、インスタンス単位で生成するのではなく、アプリケーションにただ1つだけ生成したいときに使用します。

例えばデータベースの接続先をstring変数に格納する場合、毎回string変数を生成することもできますが、アプリケーションの起動時に決定してしまうような項目の場合は、毎回作成しなくても、アプリケーションでただ1つ記憶しているだけでいいケースがあります。そのような場合はstaticキーワードを付けることで、インスタンス生成のたびにメモリ領域が確保されるのではなく、アプリケーションでただ1つのメモリ領域が確保されます。

書き方

書き方は、クラスや変数、メソッドを記述するときに、アクセス修飾子に続けて記述します。

private static int XXX;

注意事項

静的メソッドの中で使用できるフィールドはstaticフィールドのみです。

アクセスの方法

クラスのインスタンスを生成するのではなく、クラス名にドットを付けて、直接呼び出します。

サンプルコード

namespace CS25
{
    internal class Counter
    {
        //静的メンバー
        //クラス、変数等にstatic(スタティック)キーワードをつける
        //インスタンス単位でなく、クラス単位で生成される
        //つまり、アプリケーションにただ1つ
        private static int _count = 0;
        private int _value = 0;

        //静的メソッド
        internal static void Call()
        {
            //処理のなかで使えるのは静的メンバーのみ
            _count++;
            //_value++;//_valueは静的メンバーでないので使えない
        }

        internal static int GetCount()
        {
            return _count;
        }
    }
}
namespace CS25
{
    public partial class Menu : Form
    {
        public Menu()
        {
            InitializeComponent();

            //アクセスの仕方
            //クラス名を使ってアクセスする
            Counter.Call();
            //インスタンスではない
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (var f = new Form1())
            {
                f.ShowDialog();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (var f = new Form2())
            {
                f.ShowDialog();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Text = Counter.GetCount().ToString();
        }
    }
}
namespace CS25
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Counter.Call();
        }
    }
}
namespace CS25
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

            Counter.Call();
        }
    }
}