共変性のデリゲートをキャストしようとしていますが、何らかの理由で「as」演算子を使用してのみキャストできます。
interface MyInterface { }
delegate void MyFuncType<in InType>(InType input);
class MyClass<T> where T : MyInterface
{
public void callDelegate(MyFuncType<MyInterface> func)
{
MyFuncType<T> castFunc1 = (MyFuncType <T>) func; //Error
MyFuncType<T> castFunc2 = func as MyFuncType<T>;
MyFuncType<T> castFunc3 = func is MyFuncType<T> ? (MyFuncType<T>)func : (MyFuncType<T>)null; //Error
}
}
castFunc2は正常に動作しますが、castFunc1とcastFunc3によりエラーが発生します。
Cannot convert type 'delegateCovariance.MyFuncType<myNamespace.MyInterface>' to myNamespace.MyFuncType<T>'
as演算子に関するMSDNの記事には、castFunc2とcastFunc3は「同等」であると記載されているため、どちらか一方だけがエラーを引き起こす可能性があるのかわかりません。私を混乱させているもう1つの部分は、MyInterfaceをインターフェイスからクラスに変更するとエラーがなくなることです。
誰かが私がここで何が起こっているのかを理解するのを手伝ってもらえますか?ありがとう!