1.互換性のあるデリゲート型
委任 無効D1(); 委任 無効D2(); D1、D1 = 方法1。 D2 D2 = D1。
以下は許可されています。
D2 D2 = newD2(D1)。
同じターゲット方法で手数料のためには、等しいものとして扱われるべきです。
委任 のボイドDを(); ... D、D1 = 方法1。 D D2 = 方法1。 Console.WriteLineを(D1 == D2)。// 真
同様に、マルチキャストデリゲートのために、同じ方法と同じ順序を含み、等しいと見なされた場合。
2.パラメータ・タイプの互換性
OOPでは、親クラスを使用して任意の場所ではなく、サブクラスで使用することができ、OOPの考え方は同様に効果的なパラメータが委任します。以下のような:
委任 無効 StringAction(文字列複数可)。クラスプログラム{ 静的な 無効メイン(){ StringAction SA = 新しいStringAction(ActOnObject)。 SA(" こんにちは" ); } 静的 ボイド ActOnObject(オブジェクトO){ Console.WriteLineを(O)// こんにちは } }
3.戻り型が互換性
同じ理由で、引数の型は互換性があります。
デリゲート オブジェクト ObjectRetriever(); クラスプログラム{ 静的 ボイドメイン(){ O ObjectRetriever = 新しいObjectRetriever(RetriveString)。 オブジェクトの結果= O()。 Console.WriteLineを(結果)。// ハロー} 静的 文字列 RetriveString(){ リターン " こんにちは" ; } }