Обобщенный интерфейс ковариантность - C#

Узнай цену своей работы

Формулировка задачи:

Господа, подскажите пожалуйста по коду. Вот ради эксперимента набросал код, но не пойму, почему метод GetNameObj возвращает объект типа a1 если ему как через конструктор, так и через параметр типа передают a2. Вот код
using System;
interface a<out T>
{
    T GetNameObj();
}
class b<T> : a<T>
{
    T t;
    public b(T o)
    {
        t = o;
    }
    public T GetNameObj()
    {
        Console.WriteLine(typeof(T).Name);
        return t;
    }
}
class a1 {  }
class a2 : a1 {  }
class c
{
    static void Main()
    {
        a<a1> A = new b<a2>(new a2());
        a2 A2 =(a2) A.GetNameObj(); //вот этот метод почему-то возвращает тип a1
        
    }
}
Мне кажется, что единственным объяснением такого поведения является то, что методу без разницы что я там передаю за тип данных в конструктор или параметр типа, ему главное что в интерфейсной ссылке указан параметр типа a1. Но в таком случае приоритет выше у интрефейса чем у у типа объекта ? Или я что-то не правильно понял ? Подскажите пожалуйста.

Решение задачи: «Обобщенный интерфейс ковариантность»

textual
Листинг программы
class b_a2 : a_a2
{
    a2 t;
    public b(a2 o)
    {
        t = o;
    }
    public a2 GetNameObj()
    {
        Console.WriteLine(typeof(a2).Name);
        return t;
    }
}

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


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

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

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