拡張メソッド

拡張メソッド(かくちょうメソッド)とは、既存のクラスや構造体などの型に対して、新たなメソッドを追加する仕組みのことです。C# 3.0から導入された機能で、静的メソッドの定義方法に「this」キーワードを付けることで、そのクラスのインスタンスに対して、まるでそのクラスにメソッドが追加されたかのように、拡張メソッドを呼び出すことができます。

サンプル

例えば、既存の「string」クラスに「ToUpperFirstLetter」というメソッドを追加する場合、以下のように拡張メソッドを定義することができます。

public static class StringExtensions
{
    public static string ToUpperFirstLetter(this string str)
    {
        if (string.IsNullOrEmpty(str))
        {
            return str;
        }
        return char.ToUpper(str[0]) + str.Substring(1);
    }
}

この例では、StringExtensionsクラスにToUpperFirstLetterメソッドが追加されます。このメソッドはstring型の変数に対して呼び出すことができ、文字列の先頭の1文字を大文字に変換した文字列を返すものです。呼び出し方は、通常のインスタンスメソッドのように、文字列を引数としてToUpperFirstLetterメソッドを呼び出すことができます。

拡張メソッドを利用することで、自分のクラスに新たなメソッドを追加することもできます。ただし、拡張メソッドは、オーバーロードや非公開メソッドの追加など、ある程度の制限があります。

注意

以下に、拡張メソッドにおける主な制限をいくつか挙げます。

  • 拡張メソッドは、静的メソッドである必要があります。
  • 拡張メソッドの第一引数には、「this」キーワードを付けた型のインスタンスを渡す必要があります。
  • 拡張メソッドは、元のクラスのメンバーにアクセスすることはできません。
  • 拡張メソッドは、同名の既存のメソッドを上書きすることができません。
  • 拡張メソッドは、インターフェイスに対して定義することができますが、インターフェイスのメソッドを拡張することはできません。
  • 拡張メソッドは、クラスや構造体、インターフェイス、列挙型などの型に対して定義することができますが、動的型には定義できません。

また、拡張メソッドは、C# 3.0以降のバージョンでのみ利用できます。また、拡張メソッドは、可読性が低下する場合があるため、適切に使うことが重要です。必ずしも全ての場面で使うべきではありません。