C# - スタティック メソッド(static method)を定義する

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);
実行結果(Visual Studio) 実行結果

スタティック・メソッド の オーバーライド(継承)

スタティック・メソッド の オーバーライド はできません。 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);

検証環境

関連ページ