匿名メソッドと通常のメソッドとの違いについて(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

匿名メソッドとは

あるメソッドがデリゲートを介してしか呼び出されない場合、匿名メソッドを使用すると記述が簡素になります。

逆に言えば、あるメソッドが他のクラスからアクセスされる可能性がある場合は、匿名メソッドを使用しない方がいいです。

匿名メソッドはC#2.0から使える機能です。この匿名メソッドという機能は、C#3.0で追加されたラムダ式の下位互換と言っても過言ではありません。

そのため、匿名メソッドを必ず理解する必要のある機能かと言われるとかなり微妙です。

匿名メソッドは、ラムダ式の良さを理解するための当て馬的な扱いをされることが多いです。

匿名メソッドを使わない場合との比較

ソースコード(匿名メソッドを使わない場合)

実行結果

こんにちは

ソースコード(匿名メソッドを使った場合)

実行結果

こんにちは

 

匿名メソッドは以下のように記述します。

delegate (引数)
{
メソッド内のコード;
};

匿名メソッドを使わない場合は、Helloメソッドがあります。

一方で、匿名メソッドを使った場合は、Helloという名前のメソッドが登場しません。

このようにメソッドの名前がないことから匿名メソッドと呼ばれます。

message = delegate ()
{
Console.WriteLine(“こんにちは”);
};

ちなみに、上のコードをラムダ式を使って書き換えると、以下のようなコードになります。

message = () => Console.WriteLine(“こんにちは”);

引数がある場合の例

引数のある場合を考えます。

通常のメソッド、匿名メソッド、ラムダ式の3パターンを比較します。

ソースコード

実行結果

200
200
200

外部変数を使用する

値を2倍にするメソッドが、変数numに対してのみ使う場合を考えます。

メソッドを使用した時に、変数numの値が変更できれば、十分です。

ソースコード

実行結果

200
200
200

通常のメソッドでは、変数numに直接アクセスできません。

一方、匿名メソッドとラムダ式は変数numにアクセスすることができます。

このように、匿名メソッドまたはラムダ式を使用した場合、引数を減らせる場合があります。

まとめ

通常のメソッドと比較した時の、匿名メソッドのメリットとデメリットを整理する。

メリット
・メソッドの定義とメソッドを使用する箇所が近い。そのため、ソースコードを行ったり来たりする作業が減る
・扱う引数が減る場合がある

デメリット
・他のクラス及びメソッドからアクセスされる可能性がある場合、匿名メソッドの使用は不適切。

※匿名メソッドとラムダ式の比較は別の記事で行う予定

無料体験レッスンあり。マンツーマン形式で初心者向け。
  • このエントリーをはてなブックマークに追加

スポンサーリンク

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)