.NET 4.x Контрвариация обобщенных интерфейсов - C#
Формулировка задачи:
Насколько я понимаю, если определен контрвариационный обобщенный интерфейс, то метод, чей параметр помечен как in, должен принимать либо указанный тип, либо более обобщенный тип, по аналогии с тем, как это сделано в обобщенных делегатах.
Почему в качестве параметра не удается передать экземпляр класса родителя?
Спасибо.
public interface I <in T> { void IMethod(T GenericObject); } public interface Iout<out T> { } class A : I<A>,Iout<A> { public void IMethod(A a) { } } class B : A ,I<B>,Iout<B> { public void IMethod(B b) { Console.WriteLine("So, that's contrvariation! "); } } class Program { static void Main() { I<A> a = new A(); I<B> b = new B(); a.IMethod(new B()); b.IMethod(new A()); // преобразование невозможно A a1 = new A(); B b1 = new B(); a1.IMethod(new A()); b1.IMethod(new A()); Iout<A> a2 = new A(); Iout<B> b2 = new B(); b = a; a2 = b2; b.IMethod(new B()); } }
Решение задачи: «.NET 4.x Контрвариация обобщенных интерфейсов»
textual
Листинг программы
public interface I <in T> { void IMethod(T GenericObject); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д