Зачем в коде контравариантность если её используют в приведении базового типа к наследуемому? - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток!!! Помогите разобраться почему на экран не выводится "Arial", 20, "Red"(ковариантность)??? и ещё вопрос: зачем здесь контравариантность если её используют в приведении базового типа к наследуемому??? а тут ведь я так понимаю она(контра) используется для того чтобы из объекта который передается методу этого же объекта в качестве аргумента изъять и вывести на экран информацию о его полях... (P.S.не думал что смогу написать что либо подобное) смотрел на форуме - Ковариантность и Контрвариантность - что это?, на сайте MS, читал Ш.Герберта, читал на другом ресурсе и всё же не нашел или не смог найти ответов...
using System;
 
namespace ConsoleApplication1
{
    public interface IFont
    {
        string Name();
        int FontSize();
    }
 
    // Обобщенный интерфейс, имеющий ковариантность
    // по отношению к своему обобщенному типу
    public interface IFontColor<out T> : IFont
    {
        T BaseAndColorInfoFont();
    }
 
    // Обобщенный интерфейс обеспечивающий контравариантность
    public interface IFontInfo<in T> : IFont
    {
        void MyFontInfo(T obj);
    }
 
    class Font : IFontInfo<Font>
    {
        string name;
        int fontsize;
 
        public Font(string name, int fontsize)
        {
            this.name = name;
            this.fontsize = fontsize;
        }
 
        // Реализуем интерфейс IFontInfo
        public string Name()
        {
            return name;
        }
 
        public int FontSize()
        {
            return fontsize;
        }
 
        public virtual void MyFontInfo(Font obj)
        {
            Console.WriteLine(@"Информация о шрифте
__________________
 
Название:{0}
Размер: {1}px",obj.Name(),obj.FontSize());
        }
    }
 
    class FontColor : Font, IFontColor<FontColor>
    {
        string color;
 
        public FontColor(string name, int fontsize, string color)
            : base(name, fontsize)
        {
            this.color = color;
        }
 
        public FontColor BaseAndColorInfoFont()
        {
            FontColor fontBase = new FontColor("Arial", 20, "Red");
            return fontBase;
        }
 
        public override void MyFontInfo(Font obj)
        {
            base.MyFontInfo(obj);
            Console.WriteLine("Цвет: "+color);
        }
    }
 
    class Program
    {
        static void Main()
        {
            // Создадим экземпляр класса Font, ссылающийся
            // на класс FontColor благодаря ковариантности
            Font ob = new FontColor("Times New Roman", 22, "Black");
            //Вывод на экран содержимого объекта ob.
            ob.MyFontInfo(ob);
        }
    }
}

Решение задачи: «Зачем в коде контравариантность если её используют в приведении базового типа к наследуемому?»

textual
Листинг программы
 iobj = istr;

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


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

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

10   голосов , оценка 4 из 5
Похожие ответы