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

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


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

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

14   голосов , оценка 4 из 5