自作のクラスがどのくらいインスタンス化されているか…など、
クラス毎の変数が欲しい時があります。
そんな時
静的フィールド
を使うことで実現できます!
実ソース
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#プログラミングのイディオム/定石&パターン
- 作者: 出井秀行
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/18
- メディア: 大型本
- この商品を含むブログ (1件) を見る