C# - クラス - 変数と定数
クラスが持つ変数としては、静的(クラス)変数とインスタンス変数がある。
静的変数は、クラスで共通して一つ持ち、インスタンス変数はインスタンス毎に同名の変数を別に持つ。
静的変数は「クラス名.変数名」と書き、インスタンス変数は「インスタンス名.変数」と書いてアクセスを行う。定数もクラスフィールードで定義したものは、静的変数と同様に「クラス名.定数名」で読みだす。
using System; //静的(クラス)変数とインスタンス変数と定数 class MyClass { public static int st = 0; public int ins = 0; public const int c = 999; //変数値を表示する public void PrintVars(string s) { Console.WriteLine("インスタンス {0}", s); Console.WriteLine(" 静的変数 : {0}", st); Console.WriteLine(" インスタンス変数 : {0}", ins); Console.WriteLine(" 定数 : {0}", c); } //静的変数に値を代入する public void SetStaticVar(string s, int i) { Console.WriteLine("インスタンス {0} のメソッドで", s); Console.WriteLine(" 静的変数に{0}を代入", i); MyClass.st = i; } } class MyMain { static void Main(string[] args) { //静的変数に直接代入 Console.WriteLine("静的変数に直接 10 を代入"); MyClass.st = 10; //静的変数と定数の直接読み出し Console.WriteLine("静的変数 : {0}", MyClass.st); Console.WriteLine("定数 : {0}", MyClass.c); //インスタンスaを作成 MyClass a = new MyClass(); // 静的変数に代入はできない //a.st = 99; //インスタンス変数に代入 Console.WriteLine("インスタンス変数に100を代入"); a.ins = 100; a.PrintVars("a"); //インスタンスbを作成 MyClass b = new MyClass(); Console.WriteLine("インスタンス変数に200を代入"); b.ins = 200; b.PrintVars("b"); //インスタンスaから静的変数に代入 a.SetStaticVar("a", 20); a.PrintVars("a"); b.PrintVars("b"); } }
実行結果
静的変数に直接 10 を代入 静的変数 : 10 定数 : 999 インスタンス変数に100を代入 インスタンス a 静的変数 : 10 インスタンス変数 : 100 定数 : 999 インスタンス変数に200を代入 インスタンス b 静的変数 : 10 インスタンス変数 : 200 定数 : 999 インスタンス a のメソッドで 静的変数に20を代入 インスタンス a 静的変数 : 20 インスタンス変数 : 100 定数 : 999 インスタンス b 静的変数 : 20 インスタンス変数 : 200 定数 : 999