私は頭の周りの代表者を持っていると思います。これで、特定の問題を解決するために通常ほとんどの「もの」が存在することがわかりましたが、デリゲートはどのような問題を解決しますか。
IMOは、別のプロジェクトから参照できない既存のプロジェクトを呼び出したい場合に問題を解決します(そうしないと、両方のプロジェクトが相互に参照していて、許可されていない状況になる可能性があります)。これは私には理にかなっており、使用法を見ることができます。
他に時間/理由/利点はありますか?
これらは、関数を変数に入れて操作できるようにするために存在します。たとえばEnumerable.Select
、各要素をどう処理するかを指示するデリゲートを取り上げます。Select
代理人なしでどのように実装しますか?たとえば、インターフェイスを実装する必要がありますが、それは不器用です。(Javaはそのようにそれを行い、それはそれほど良くありません)。
実際、デリゲートは1メソッドのインターフェースに非常によく似ています。
これらはネイティブコードの相互運用にも存在するため、ネイティブメソッドへのネイティブ関数ポインターを提供できます。
たとえば、ボタンを使用してフォームを閉じるために、winformでそれらを使用します。
button.Click += delegate{this.Close();};