Ковариантность обобщений - разобрать код - 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;