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