class に スタティック・メソッド(静的メソッド) を追加するには、キーワード「static」を使用します。
スタティック・メソッド(static method)の定義方法
class クラス名
{
static 戻り値の型 メソッド名()
{
}
public static 戻り値の型 メソッド名()
{
}
}
サンプルコード
class SampleClass
{
// 引数を一つもつ、スタティックメソッド
public static int Test(int arg)
{
return arg * 2;
}
}
// スタティック メソッド の呼び出し
int result = SampleClass.Test(10);
// 結果 = 20
Console.WriteLine(result);
- 4行目: Test の名前で、スタティックメソッドを定義しています。
- 11行目: スタティックメソッドなので、インスタンス化(new)せずに呼び出せます。

スタティック・メソッド の オーバーライド(継承)
スタティック・メソッド の オーバーライド はできません。 new 演算子を使用し、上書き(隠す)は可能です。class 親クラス名
{
static 戻り値の型 メソッド名()
{
}
}
class 子クラス名 : 親クラス名
{
// new をつけて上書き(隠す)
static new 戻り値の型 メソッド名()
{
}
}
子クラス から 親クラス の スタティック メソッド を呼ぶ
親クラスの スタティック メソッド に、 アクセス修飾子 public または internal が必要です。class 親クラス名
{
// public または internal が必要
public static 戻り値の型 メソッド名()
{
}
}
class 子クラス名 : 親クラス名
{
public static new 戻り値の型 メソッド名()
{
親クラス名.メソッド名();
}
}
子クラスのアクセス修飾子に注意
子クラスのアクセス修飾子を忘れると、子クラスの スタティック メソッド は呼ばれません。次の例では 子クラスの Test メソッドが private になるため、 親クラスの Test メソッドが呼ばれます。
// 基底クラス
class SuperClass
{
public static int Test()
{
return 10;
}
}
// 派生クラス
class SubClass : SuperClass
{
// アクセス修飾子 が無いので private
static new int Test()
{
return 100;
}
}
// スタティック メソッド の呼び出し
result = SubClass.Test();
// 結果 = 10
Console.WriteLine(result);
検証環境
- .NET 5.0
- Microsoft Visual Studio Professional 2019 Version 16.9.4
- Microsoft Windows 10 Pro Version 20H2 OS Build 19042.928 Experience: Windows Feature Experience Pack 120.2212.551.0