ボス級社内SEのお役立ち技術情報

社内SEのシステム開発について。メインプログラム言語C#

【VisualStudio2017 (C#)】インスタンス毎ではなくクラス毎に変数を作成する便利技

自作のクラスがどのくらいインスタンス化されているか…など、
クラス毎の変数が欲しい時があります。
そんな時
静的フィールド
を使うことで実現できます!

実ソース

using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Cat a = new Cat();
            a.CountInstance(); ←「1」が表示される
            Cat b = new Cat();
            b.CountInstance(); ←「2」が表示される
            Cat c = new Cat();
            c.CountInstance(); ←「3」が表示される
        }
    }
 
    public class Cat
    {
     //静的フィールド         private static int instances = 0;
     //コンストラクタ         public Cat()         {             instances++;         }         public void CountInstance()         {             Console.WriteLine("instanes=" + instances);         }     } }

 

解説

Catクラスの以下部分で変数を定義して初期化しています。

private static int instances = 0;

 

Catクラスのインスタンスが生成される毎にコンストラクタが実行されinstances変数加算されます。

public Cat()
{
    instances++;
}

 

つまりインスタンス毎の変数ではなく、クラスの変数として扱われます。

インスタンスを生成する毎に初期化はされません。

 

staticな(静的な)困ったときの解決策として使用できるので大変便利です。

 

実戦で役立つ C#プログラミングのイディオム/定石&パターン

実戦で役立つ C#プログラミングのイディオム/定石&パターン