Ковариантность обобщений - разобрать код - C#
Формулировка задачи:
Почему тут Figure становится типом Circle?
Должен же быть Shape, мы же апкастим его до Shape в строчке
IContainer<Shape> container = new Container<Shape>(circle);
Что-то не пойму...
using System; // Ковариантность обобщений. namespace Generics { public abstract class Shape { } public class Circle : Shape { } public interface IContainer<T> { T Figure { get; set; } } public class Container<T> : IContainer<T> { public T Figure { get; set; } public Container(T figure) { this.Figure = figure; } } class Program { static void Main() { Circle circle = new Circle(); IContainer<Shape> container = new Container<Shape>(circle); Console.WriteLine(container.Figure.ToString()); // Delay. Console.ReadKey(); } } }
Вроде понял так. Свойство Figure содержит ссылку на переменную типа Сircle. При этом container.Figure.ToString() показывает, что Figure является типом Circle, а внутри container она воспринимается как Shape. Правильно или я совсем запутался?
Решение задачи: «Ковариантность обобщений - разобрать код»
textual
Листинг программы
var boo = new Boo(); var foo = (Foo)boo;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д