Je suis en train de jeter un contravariant délégué, mais pour une raison que je ne peut le faire qu'en utilisant le "comme" de l'opérateur.
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 fonctionne très bien mais castFunc1 et castFunc3 la cause de l'erreur:
Cannot convert type 'delegateCovariance.MyFuncType<myNamespace.MyInterface>' to myNamespace.MyFuncType<T>'
L' article MSDN sur l'opérateur déclare que castFunc2 et castFunc3 sont "équivalentes", donc je ne comprends pas comment un seul d'entre eux pourrait provoquer une erreur. Un autre morceau de ce qui est déroutant moi est que le changement de MyInterface à partir d'une interface à une classe de se débarrasser de l'erreur.
Quelqu'un peut-il m'aider à comprendre ce qui se passe ici? Merci!