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