Как не инициировать поля базового класса в его производных классах? - C#

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

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

У меня есть базовый класс, от него идут несколько производных классов, от которых, в свою очередь, идут свои производные классы. Набросал упрощенный вариант, одного из ветвлений:
Листинг программы
  1. using System;
  2. using System.Linq;
  3. namespace Test_01
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. BaseClass[] baseClass =
  10. {
  11. new Class3(new Class2(), "100", 100)
  12. };
  13. Console.WriteLine(string.Join("",baseClass.Select(s=>s)));
  14. Console.ReadKey(false);
  15. }
  16. }
  17. public abstract class BaseClass : IComparable<BaseClass>
  18. {
  19. private string _name;
  20. private double _price;
  21. protected string Name
  22. {
  23. get { return _name; }
  24. set { _name = value; }
  25. }
  26. protected double Price
  27. {
  28. get { return _price; }
  29. set { _price = value; }
  30. }
  31. protected BaseClass()
  32. {
  33. }
  34. public BaseClass(string name, double price)
  35. {
  36. _name = name;
  37. _price = price;
  38. }
  39. public int CompareTo(BaseClass other)
  40. {
  41. throw new NotImplementedException();
  42. }
  43. }
  44. abstract class Class1 : BaseClass
  45. {
  46. private string _text;
  47. protected string Text
  48. {
  49. get { return _text; }
  50. set { _text = value; }
  51. }
  52. protected Class1(string name, double price)
  53. : base(name, price)
  54. {
  55. }
  56. protected Class1()
  57. {
  58. }
  59. public virtual string GetText()
  60. => Text;
  61. }
  62. abstract class Class1Dec : Class1
  63. {
  64. protected Class1Dec(string name, double price)
  65. : base(name, price)
  66. {
  67. }
  68. }
  69. class Class2 :Class1
  70. {
  71. public Class2()
  72. {
  73. this.Text = "Hello";
  74. }
  75. }
  76. sealed class Class3 : Class1Dec
  77. {
  78. Class1 _class1;
  79. public Class3(Class1 class1, string name, double price)
  80. : base(name, price)
  81. {
  82. _class1 = class1;
  83. }
  84. public override string GetText()
  85. {
  86. return _class1.GetText() + " World!";
  87. }
  88. public override string ToString()
  89. {
  90. return this.GetText();
  91. }
  92. }
  93. }
Как можно организовать подобное, так чтобы, когда я создаю класс Class2 не инициировались поля суперкласса?(name, price) PS. В моем случае там будет null и 0.

Решение задачи: «Как не инициировать поля базового класса в его производных классах?»

textual
Листинг программы
  1. 1) BaseClass
  2. 2) protected BaseClass() {}
  3. 3) Class1 : BaseClass
  4. 4) protected Class1(){}
  5. 5) class Class2 :Class1
  6. 6) public Class2(){//todo:}

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


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

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

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

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

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

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