Обобщенный интерфейс ковариантность - 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д