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