この章のテーマ §
静的なメンバーを作るstaticキーワードについて学びます。
前提知識 §
Console.WriteLineメソッド, 変数の基礎, int型. クラスの基礎、プロパティ、メソッド、コンストラクタ
解説 §
型のメンバーの宣言時にstaticキーワードを付けるとメンバーは【静的】になります。静的なメンバーには以下の特徴があります。
- newしなくても必ず使える
- 一つの型につき1つだけ必ず存在する
- 使う時は"型名.メンバー名"として使い、ドットの手前にはインスタンスを書かない
情報の交通整理をするなど、プログラム中で【必ず1つ】【2つあってはならない】という情報を記述するのに便利です。
罠の数々 §
- クラスにstaticを付けると、【全てのメンバーは静的でなければならない】という制約が付く
- メソッド内のメソッドに付けると、外部の変数をキャプチャしないという制約が付く。機能が異なることに注意
- 静的なコンストラクタにアクセス修飾子は付かない。必ずシステムが自動で呼び出すので、区別する意味がない。付けることもできない
- 静的なコンストラクタは最初にそのクラスの静的メンバーが使われるときに自動的に呼び出される。明示的に呼び出す方法はない。使われなければ存在しても呼び出されない
参考リンク §
static (C# リファレンス)
サンプルソース: kw_static §
Console.WriteLine(MyStaticSample.MyPropertyStatic);
MyStaticSample.SetPropertyToStatic(2);
Console.WriteLine(MyStaticSample.MyPropertyStatic);
public class MyStaticSample
{
// 静的なプロパティ
public static int MyPropertyStatic { get; set; }
// 静的なメソッド
public static void SetPropertyToStatic(int x)
{
MyPropertyStatic = x;
}
// 静的なコンストラクタ
static MyStaticSample()
{
MyPropertyStatic = 1;
}
}
実行結果 §
1
2
リポジトリ §
https://github.com/autumn009/CSharpPrimer2
練習問題 §
以下のプログラムの実行結果を予測してみよう。
MySample<int>.Count++;
MySample<string>.Count++;
Console.WriteLine(MySample<byte>.Count);
class MySample<T>
{
public static int Count = 1;
}
- 1
- 2
- 3
- 4
- エラー
[[解答]]