回答:
デリゲートは、特定の種類のメソッドを定義する名前付きの型です。クラス定義が、それが定義する特定の種類のオブジェクトのすべてのメンバーをレイアウトするのと同様に、デリゲートは、定義する種類のメソッドのメソッドシグネチャをレイアウトします。
このステートメントに基づくと、デリゲートは関数ポインターであり、関数の外観を定義します。
デリゲートの実際のアプリケーションの優れた例は、述語です。リンクの例では、Array.Findが配列を検索に使用し、次に述語を使用して検索対象の基準を処理しています。この場合、Predicateシグネチャと一致するProductGT10メソッドを渡します。
「C#3.0の学習:C#3.0の基礎をマスターする」で述べたように
一般的なシナリオ: 国家元首が亡くなったとき、米国の大統領は通常、個人的に葬式に出席する時間がない。代わりに、彼はデリゲートを派遣します。多くの場合、この代理人は副大統領ですが、VPが不在の場合、大統領は国務長官やファーストレディなどの誰かを派遣する必要があります。彼は、委任された権限を1人に「固定」したくありません。彼は、この責任を、正しい国際プロトコルを実行できるすべての人に委任する可能性があります。
大統領は、どの責任が委任されるか(葬式に出席する)、渡されるパラメーター(お悔やみ、優しい言葉)、および彼が取り戻すことを望む値(善意)を事前に定義します。その後、大統領は、大統領の職務が進むにつれて、「実行時」にその委任された責任に特定の人物を割り当てます。
プログラミングのシナリオ: 特定のアクションを実行する必要がある状況に直面することがよくありますが、どのメソッド、またはどのオブジェクトでさえ、それを実行するために呼び出す必要があるか事前にわかりません。
例: ボタンは、通知する必要があるオブジェクトを認識していない場合があります。ボタンを特定のオブジェクトに関連付けるのではなく、ボタンをデリゲートに接続し、プログラムの実行時にそのデリゲートを特定のメソッドに解決します。
win32 Pythonを使用するプロジェクトがありました。
さまざまな理由により、一部のモジュールはodbc.pyを使用してDBにアクセスし、他のモジュールはpyodbc.pyを使用しました。
両方の種類のモジュールで関数を使用する必要があるときに問題が発生しました。引数として接続オブジェクトが渡されましたが、時刻を表すためにdbi.dbiDateとdatetimeのどちらを使用するかを知る必要がありました。
これは、SQLステートメントの値としてodbc.pyがdbi.dbiDateとして日付が期待されるのに対し、pyodbc.pyは日時値が期待されるためです。
さらに複雑なのは、odbc.pyおよびpyodbc.pyによって作成された接続オブジェクトでは、追加のフィールドを設定できないことでした。
私の解決策は、odbc.odbc(...)およびpyodbc.pyodbc(...)によって返された接続オブジェクトをデリゲートクラスでラップすることでした。これには、追加のフィールドの値として目的の時間表現関数を含み、デリゲートします元の接続オブジェクトに対する他のすべてのフィールド要求。
あなたと同じ質問があり、このサイトに回答を求めました。
どうやら、私はこのスレッドの例をざっと見ても、それをよく理解していませんでした。
私が読んだところ、デリゲートの素晴らしい使用法を見つけました: http : //www.c-sharpcorner.com/UploadFile/thiagu304/passdata05172006234318PM/passdata.aspx
Formsは、POST / GET(QueryString)を使用したASP.NET Webサイトよりも値を渡すのがはるかに複雑であるため、これは新規ユーザーにはより明白に思えるかもしれません。
基本的には、「TextBox テキスト」をパラメーターとして受け取るデリゲートを定義します。
// Form1
// Class Property Definition
public delegate void delPassData(TextBox text);
// Click Handler
private void btnSend_Click(object sender, System.EventArgs e)
{
Form2 frm= new Form2();
delPassData del=new delPassData(frm.funData);
del(this.textBox1);
frm.Show();
}
//概要:デリゲートを定義し、新しいForm2クラスをインスタンス化し、funData()関数をデリゲートに割り当て、textBoxをデリゲートに渡します。フォームを表示します。
// Form2
public void passData(TextBox txtForm1)
{
label1.Text = txtForm1.Text;
}
//概要:(デリゲートで定義されているように)TextBox txtForm1をパラメーターとして受け取り、ラベルテキストをtextBoxのテキストに割り当てます。
これがデリゲートでのいくつかの使用法を啓発することを願っています:) ..
このhttp://en.wikipedia.org/wiki/Delegation_patternで簡単なGoogle検索が思い付きました。基本的に、呼び出しを別のオブジェクトに転送するオブジェクトを使用するときはいつでも、委任します。