1. ホーム 
  2. 備忘録 
  3. C Sharp

拡張メソッド

拡張メソッド

拡張メソッドとは static メソッドをインスタンスメソッドと同じ形式で呼び出せるようにする方法である

継承を使った新規派生の型の作成、再コンパイル、または元の型の変更などを行うことなく既存の型にメソッドを追加できる

拡張メソッドの例を以下に示す

using System;
using ExtensionMethod;  // Program クラス内で拡張メソッドと使うために宣言

class Program
{
    static void Main( string[] args )
    {
        string str = "Hello! My name is Teppei Ohno. What your name?";
        
        // 出力
        str.Print(); // Hello! My name is Teppei Ohno. What your name?

        // 単語をカウントする
        int wordCount = str.WordCount();
        Console.WriteLine( $"wordCount : {wordCount}" ); // wordCount : 9
    }
}

/// <summary>
/// 拡張メソッド
/// </summary>
namespace ExtensionMethod
{
    public static class MyExtensions
    {
        public static void Print( this string str )
        {
            Console.WriteLine( str );
        }

        public static int WordCount( this string str )
        {
            return str.Split( new char[] { ' ', '.', ',', '!', '?' }, StringSplitOptions.RemoveEmptyEntries ).Length;
        }
    }
}

注意点

通常のインスタンスメソッドと拡張メソッドが同名だった場合、通常のインスタンスメソッドのほうが優先される

拡張メソッドの実態は静的メソッドなので、拡張メソッドからインスタンスの private / protected メンバーにアクセスすることはできない

クラス本体とメソッドの定義場所が別になるので、定義された場所がどこにあるか探すのに苦労する可能性がある

とくに using 文を使ってインポートする場合、using 文1つでどの静的メソッドが呼ばれるかが切り替わるため余計に混乱することがある


    参考文献

  1. [C# によるプログラミング入門]拡張メソッド
  2. [.NET Column]C#の拡張メソッドとは?引用thisやサンプルをご紹介