C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でデリゲートを宣言する方法をわかりやすく解説

C#におけるデリゲート(delegate)とは、メソッドへの参照を保持するための仕組みです。デリゲートは参照型の変数であり、特定のメソッドへの参照を格納します。この参照は実行時に自由に入れ替えることができるのが大きな特徴です。

デリゲートは、イベントの実装コールバックメソッドの処理において特に活躍します。また、すべてのデリゲートは、暗黙的に System.Delegate クラスから派生している点も押さえておきましょう。

デリゲートの宣言構文

C#でデリゲートを宣言する際の基本的な構文は以下のとおりです。

delegate <戻り値の型> <デリゲート名> <パラメーターリスト>

戻り値の型・名前・パラメーターの組み合わせが、デリゲートが参照できるメソッドのシグネチャ(署名)と一致している必要があります。

C#でのデリゲートの使用例

それでは、実際のサンプルコードを使って、デリゲートの使い方を確認してみましょう。この例では、コンソールに出力するメソッドとファイルに書き込むメソッドの2つを、同じデリゲート経由で呼び出しています。

using System;
using System.IO;

namespace DelegateAppl {

    class PrintString {
        static FileStream fs;
        static StreamWriter sw;

        // デリゲートの宣言
        public delegate void printString(string s);

        // コンソールに出力するメソッド
        public static void WriteToScreen(string str) {
            Console.WriteLine("The String is: {0}", str);
        }

        // ファイルに書き込むメソッド
        public static void WriteToFile(string s) {
            fs = new FileStream("c:\\message.txt",
            FileMode.Append, FileAccess.Write);
            sw = new StreamWriter(fs);
            sw.WriteLine(s);
            sw.Flush();
            sw.Close();
            fs.Close();
        }

        // デリゲートを引数として受け取り、
        // 必要に応じてメソッドを呼び出すメソッド
        public static void sendString(printString ps) {
            ps("Hello World");
        }

        static void Main(string[] args) {
            printString ps1 = new printString(WriteToScreen);
            printString ps2 = new printString(WriteToFile);
            sendString(ps1);
            sendString(ps2);
            Console.ReadKey();
        }
    }
}

コードのポイント

  • printString デリゲートは、「string型の引数を受け取りvoidを返す」メソッドを参照できます。
  • Main メソッド内で、WriteToScreenWriteToFile の2つのメソッドをそれぞれデリゲートに割り当てています。
  • sendString メソッドはデリゲートを引数として受け取るため、渡すデリゲートを切り替えるだけで、処理内容(画面出力かファイル書き込みか)を実行時に変更できます。

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

The String is: Hello World

このように、デリゲートを使うことで、メソッドそのものを引数として扱えるようになり、柔軟で再利用性の高いコードを書くことができます。イベント処理やコールバック設計を行う上でも必須の概念なので、ぜひマスターしておきましょう。

  1. JavaScriptでブロックスコープ変数を宣言するには?letとconstの使い方を解説

    ブロックスコープ変数とはJavaScriptでブロックスコープ変数を宣言するには、ES2015(ES6)で導入された let および const キーワードを使用します。これらのキーワードで宣言された変数は、{ }(波括弧)で囲まれたブロックの中でのみ有効となり、ブロックの外からアクセスしようとするとエラーが発生します。let と const の違いlet は値の再代入が可能な変数を宣言するキーワードで、const は再代入ができない定数を宣言するキーワードです。どちらもブロックスコープを持つため、従来の var(関数スコープ)と異なり、意図しない変数の上書きや漏れを防ぐことができます。特別な

  2. Androidでグローバル変数を宣言する方法【シングルトンパターンで実装】

    Androidにおけるグローバル変数の宣言方法本記事では、Androidアプリ全体で共有できるグローバル変数を宣言する方法を、実際のサンプルコードとともにわかりやすく解説します。AndroidにはJavaなどの言語にあるような厳密な意味での「グローバル変数」は存在しませんが、シングルトンパターンを利用することで、アプリ内のどこからでもアクセスできる変数を実現できます。手順1:新規プロジェクトを作成するAndroid Studioを起動し、「File」⇒「New Project」を選択して、必要事項を入力して新しいプロジェクトを作成します。手順2:レイアウトファイル(activity_main.