1. ホーム
  2. oop

[解決済み] Delegateとは?[クローズド]。

2022-04-25 17:07:31

質問

<余談
クローズド . この質問はもっと必要です 集中的 . 現在、回答は受け付けておりません。

<パス

この質問を改善したいですか? 問題を更新して、1つの問題だけに焦点を当てるようにする。 本論文の編集 .

クローズド 8年前 .

デリゲートの実際の役割は何なのか、混乱しています。

面接で何度もこの質問をされましたが、面接官は私の答えに納得していなかったと思います。

どなたか、最適な定義を一文で、実用的な例とともに教えていただけませんか?

どのように解決するのですか?

私はデリゲートを関数へのポインタと考えるのが好きです。 これはC言語の時代にさかのぼりますが、この考え方は今でも有効です。

あるコードを呼び出せるようにする必要があるが、呼び出すコードの断片は実行時までわからないという考え方だ。 そのためにデリゲートを使うわけです。デリゲートは、イベントハンドラなど、異なるイベントに基づいて異なる処理を行う場合に便利です。

以下は C#のリファレンスを見ることができます。

C#では、例えば、やりたい計算があって、実行時までわからない別の計算方法を使いたいとします。 そこで、このような計算方法をいくつか用意しておくとよいでしょう。

public static double CalcTotalMethod1(double amt)
{
    return amt * .014;
}

public static double CalcTotalMethod2(double amt)
{
    return amt * .056 + 42.43;
}

このようにデリゲートシグネチャを宣言することができる。

public delegate double calcTotalDelegate(double amt);

そして、このようにデリゲートをパラメータとして受け取るメソッドを宣言することができます。

public static double CalcMyTotal(double amt, calcTotalDelegate calcTotal)
{
    return calcTotal(amt);
}

と呼び出すことができます。 CalcMyTotal メソッドに、使いたいデリゲートメソッドを渡します。

double tot1 = CalcMyTotal(100.34, CalcTotalMethod1);
double tot2 = CalcMyTotal(100.34, CalcTotalMethod2);
Console.WriteLine(tot1);
Console.WriteLine(tot2);