.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);
 }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы