正解-共分散を正しく理解していません-まだ:)同じタイプであるが戻り値として次のようになっている場合、コードは機能します。
public delegate object MyDelegate()
public class MyClass
{
public MyClass()
{
_delegate = MyMethod;
}
private MyDelegate _delegate;
public SomeObject MyMethod() { return null; }
}
それは共分散を示します。または、パラメータとして保持し、タイプを切り替えることもできます。
public delegate void MyDelegate(SomeObject obj)
public class MyClass
{
public MyClass()
{
_delegate = MyMethod;
}
private MyDelegate _delegate;
public void MyMethod(object obj) {}
}
これは、共変性を示しています。
私の経験則は、「デリゲートが与えられたら、それで何ができるか?メソッドを壊す引数を渡すことができれば、変換は失敗するはずです。メソッドが何かを返すことができれば、発信者、変換は失敗したはずです。」
あなたのコードでは、あなたは次のように呼ぶことができたでしょう:
_delegate(new object());
その時点で、poorには、型であることが意図されているが、実際には型でMyMethod
あるパラメータがあります。これは非常に悪いことになるので、コンパイラはそれが起こらないようにします。SomeObject
object
それはすべてもっと理にかなっていますか?