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

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

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

Доброго времени суток!!! Помогите разобраться почему на экран не выводится "Arial", 20, "Red"(ковариантность)??? и ещё вопрос: зачем здесь контравариантность если её используют в приведении базового типа к наследуемому??? а тут ведь я так понимаю она(контра) используется для того чтобы из объекта который передается методу этого же объекта в качестве аргумента изъять и вывести на экран информацию о его полях... (P.S.не думал что смогу написать что либо подобное) смотрел на форуме - Ковариантность и Контрвариантность - что это?, на сайте MS, читал Ш.Герберта, читал на другом ресурсе и всё же не нашел или не смог найти ответов...
Листинг программы
  1. using System;
  2. namespace ConsoleApplication1
  3. {
  4. public interface IFont
  5. {
  6. string Name();
  7. int FontSize();
  8. }
  9. // Обобщенный интерфейс, имеющий ковариантность
  10. // по отношению к своему обобщенному типу
  11. public interface IFontColor<out T> : IFont
  12. {
  13. T BaseAndColorInfoFont();
  14. }
  15. // Обобщенный интерфейс обеспечивающий контравариантность
  16. public interface IFontInfo<in T> : IFont
  17. {
  18. void MyFontInfo(T obj);
  19. }
  20. class Font : IFontInfo<Font>
  21. {
  22. string name;
  23. int fontsize;
  24. public Font(string name, int fontsize)
  25. {
  26. this.name = name;
  27. this.fontsize = fontsize;
  28. }
  29. // Реализуем интерфейс IFontInfo
  30. public string Name()
  31. {
  32. return name;
  33. }
  34. public int FontSize()
  35. {
  36. return fontsize;
  37. }
  38. public virtual void MyFontInfo(Font obj)
  39. {
  40. Console.WriteLine(@"Информация о шрифте
  41. __________________
  42. Название:{0}
  43. Размер: {1}px",obj.Name(),obj.FontSize());
  44. }
  45. }
  46. class FontColor : Font, IFontColor<FontColor>
  47. {
  48. string color;
  49. public FontColor(string name, int fontsize, string color)
  50. : base(name, fontsize)
  51. {
  52. this.color = color;
  53. }
  54. public FontColor BaseAndColorInfoFont()
  55. {
  56. FontColor fontBase = new FontColor("Arial", 20, "Red");
  57. return fontBase;
  58. }
  59. public override void MyFontInfo(Font obj)
  60. {
  61. base.MyFontInfo(obj);
  62. Console.WriteLine("Цвет: "+color);
  63. }
  64. }
  65. class Program
  66. {
  67. static void Main()
  68. {
  69. // Создадим экземпляр класса Font, ссылающийся
  70. // на класс FontColor благодаря ковариантности
  71. Font ob = new FontColor("Times New Roman", 22, "Black");
  72. //Вывод на экран содержимого объекта ob.
  73. ob.MyFontInfo(ob);
  74. }
  75. }
  76. }

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы