C#

C#2.0 で追加された「匿名メソッド」とは?

匿名メソッドとは? [C#]

こんにちは、リバティエンジニア[?]のFUNAです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。

今回はC#における、匿名メソッドについてお話します。

C# 2.0 より前のバージョンの時には、デリゲートを宣言する際には、名前付きのメソッドを使用する方法しかありませんでした。

ですが、C# 2.0より、「匿名メソッド」というものが導入されました。

この匿名メソッドではパラメーターリストを省略することができます。
どうゆうことかというと、匿名メソッドをさまざまなシグネチャを持つデリゲートに変換することができるのです。

IT博士
IT博士

要は、関数名のない関数が「匿名メソッド」ということになります。

ではどうやって関数名のない関数を呼び出すのでしょうか?

実際にサンプルコードとみていきましょう!

匿名メソッドのサンプルコード

では早速匿名メソッドについてみていくのですが、この匿名メソッドは「デリゲート」が大きく関わってきます。

もし「デリゲート」についてもっと知りたい方はこの記事を参考にしてみてください!

C# 世界一わかるデリゲート(delegate)について

まずは、普通に名前の付いた関数を呼び出すデリゲートを見てみます。

// delegateの宣言
delegate void TestMethodeDelegate();

// テストメソッド
static void TestMethode()
{
    Console.WriteLine("これはデリゲートのテスト関数です。");
}

// メイン関数
static void Main(string[] args)
{
    // デリゲートを生成する
    TestMethodeDelegate func = new TestMethodeDelegateTestMethodeDelegate(TestMethode);
    // デリゲートの処理を実行
    func();
}

このプログラムの場合だと、デリゲートで呼び出されるメソッドは”TestMethode”という、メソッドに”名前”がついていますよね。

デリゲートでは、メソッドを参照できる型で変数を作ることができますが、
匿名メソッドでは、メソッドの定義をそのままデリゲート変数に代入して、そのデリゲートを呼び出すことで実行することができるんです。

// delegateの宣言
delegate void TestMethodeDelegate();

// メイン関数
static void Main(string[] args)
{
    // デリゲートに匿名メソッドを代入する
TestMethodeDelegate func = delegate () 
        {
            Console.WriteLine("これはデリゲートのテスト関数ですが、このメソッドそのものに名前はありません.");
        };
    // デリゲートの処理を実行
    func();
}

デリゲートを生成して実行し、
「これはデリゲートのテスト関数ですが、このメソッドそのものに名前はありません.」
という文字列が表示されます。

サンプルコードを見るとわかりますが、このメソッドは名前がありません。
(これが「匿名メソッド(無名関数)」と呼ばれるものです)

匿名メソッドの特殊な機能 (外部変数のキャプチャ)

ここまでは、匿名メソッドとはなんなのか?どうやって使うの?という内容を見てきました。

次に、匿名メソッドにある特殊な機能「外部変数のキャプチャ」について説明します。

匿名メソッドを使っているコードを見ると、スコープを抜けて値が保持されていないはずの変数が参照されている。という不思議なコードがあると思います。

スコープ外に出たはずの変数の値がなぜ扱えているかというと、

匿名メソッドが上位スコープの変数を参照しているとき、
その変数の寿命を匿名メソッドの寿命が尽きるまで延命する

という機能によるものなんです。

なので「匿名メソッド(無名関数)」を使うときには、この「外部変数のキャプチャ」に注意して使ってくださいね。


 

Kindle Unlimitedで無料で本が読める

 

Kindle Unlimitedを無料で試す

 

なら最初の30日間は無料でコーディング・デザイン・ブログ・英語・Youtubeの参考書・キャリア・副業・マーケティング・漫画・美容知識・雑誌などが読み放題です。

人気の本もあるので是非お試ししてみてください!30日以内に解約すればお金は全くかかりません。

 


最近の投稿

【今すぐ行動しよう】フリーランスエンジニアとブログの相性は抜群!

フリーランスエンジニアがスキルや経験から得たビジネスノウハウを共有する手段として「ブログ」は非常におすすめです。自身のスキルや知識のアウトプットや、実際に自分が経験したことを共有して同じような境遇の人の手助けになるような情報を公開することで自分に帰ってくるメリットは非常に多いです。今回はそのあたりについて紹介していきます。

【経験談】フリーランスのエンジニアは本当に大変なの?安定のコツやポイント

フリーランスのエンジニアは「大変だからやめとけ」という話をよく聞くので、そのことについて現役でフリーランスエンジニアとして生活している私が、その話の実態を解説しようと思います。フリーランスエンジニアの大変なところはもちろんありますが、それ以上にメリットが多いので私個人的には非常におすすめしています。

【幸福度UP】フリーランスエンジニアの「田舎暮らし」実現できます

フリーランスエンジニアとして田舎で暮らす人が増えてるって聞くけど、本当なのかな?どうやったら実現できるのか?今回はフリーランスエンジニアとして田舎で生活をしたいという方向けに、実現可能なのか、実現するにはどうすれば良いのかをご紹介します。

【単価交渉で収入アップ】フリーランスが単価交渉を成功させる4つのポイント

フリーランスが収入をアップさせるための重要な手段のひとつに「単価交渉」があります。今回は、現役でフリーランスとしてエンジニアをしている私が実践して効果のあった単価交渉の方法やコツをご紹介します。

【 今なら無料!】タスク管理ツール「Backlog」を無料で使う方法と手順

今回は、普段のタスク管理からプロジェクトの管理まで幅広く使えるツール「Backlog」を無料で使うための方法とその手段を画像つきで紹介しました。もし気に入らなければ、期間内に解約してしまえば費用はかかりません。また、以外と知られていない「フリープラン」も紹介しているので、是非参考にしてみてください。

Copyright© FUNA BLOG , 2021 All Rights Reserved.