多分わかりやすいC#の拡張メソッド

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、サイオステクノロジー技術部 武井です。今回はC#の拡張メソッドについて書きたいと思います。これも何番煎じくらいかもうわかりません。私の備忘録も兼ねています。

拡張メソッド

自分が作ったクラスにメソッドを追加するのは簡単ですが、他人が作ったクラスにメソッドを追加したいと思ったことはないでしょうか?通常であれば、そのクラスの作者にお願いしないと、メソッドの拡張は実現できませんが、C#は拡張メソッドという機能を使うと、簡単に実現できます。しかも、そのメソッドはインスタンスメソッドとして使うことが出来ます。

構文は以下になります。

static [拡張メソッドの戻り値の型] [メソッド名](this 拡張対象のクラス,[引数]) {
・・・処理・・・
}

用途があるのかわかりませんが、string型の文字列の末尾に「※ただしイケメンに限る」を追加するという拡張メソッドをstringクラスに追加してみたいと思います。

static class StringExtensions
{
    public static string AddIkemen(this string s)
    {   
        return s + "※ただしイケメンに限る";
    }   
}

class ExtensionMethodTest
{
    static void Main(string[] args)
    {   
        string s = "今日はポイント5倍デーです。";
        Console.Write(s.AddIkemen());

        Console.ReadLine();
    }   
}

結果は以下のとおりです。

今日はポイント5倍デーです。※ただしイケメンに限る

インターフェースにも拡張メソッド

全く同様の手順でインターフェースにも拡張メソッドを追加できます。こちらのほうがよく使われていますね。

ここでIEnumerableインターフェースを拡張する例を考えてみます。IEnumerable<string>の場合、リストすべての文字列の末尾に「※ただしイケメンに限る」を追加してみます。

static class Extensions
{
    public static IEnumerable AddIkemen(this IEnumerable list)
    {
        foreach (string x in list)
        {   
            yield return x + "※ただしイケメンに限る";
        }       
    }       
}

class Program
{
    static void Main(string[] args)
    {   
        IEnumerable lists = new string[] {
            "この商品は10%オフです。",
            "ご自由にお取りください。", 
            "ご試食はこちらからお願いします。" };

        lists = lists.AddIkemen();

        foreach (var x in lists) {
            Console.WriteLine(x);
        }       
            
        Console.ReadLine();
    }       
}

結果は以下のようになります。

この商品は10%オフです。※ただしイケメンに限る
ご自由にお取りください。※ただしイケメンに限る
ご試食はこちらからお願いします。※ただしイケメンに限る

絶望感たっぷりですね。

まとめ

拡張メソッド便利ですね。例が適切でなかったかもしれません。便利なのですが、あまり使いすぎると、どのクラスやインターフェースにどのメソッドが拡張されているのかわからなくなるような気がします。では、素敵な拡張メソッドライフを。No Extension Method、No Life!!

アバター画像
About 武井 宜行 269 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる