Обобщенный интерфейс ковариантность - C#
Формулировка задачи:
Господа, подскажите пожалуйста по коду. Вот ради эксперимента набросал код, но не пойму, почему метод GetNameObj возвращает объект типа a1 если ему как через конструктор, так и через параметр типа передают a2.
Вот код
Мне кажется, что единственным объяснением такого поведения является то, что методу без разницы что я там передаю за тип данных в конструктор или параметр типа, ему главное что в интерфейсной ссылке указан параметр типа a1. Но в таком случае приоритет выше у интрефейса чем у у типа объекта ? Или я что-то не правильно понял ? Подскажите пожалуйста.
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
}
}Решение задачи: «Обобщенный интерфейс ковариантность»
textual
Листинг программы
class b_a2 : a_a2
{
a2 t;
public b(a2 o)
{
t = o;
}
public a2 GetNameObj()
{
Console.WriteLine(typeof(a2).Name);
return t;
}
}