Как не инициировать поля базового класса в его производных классах? - C#
Формулировка задачи:
У меня есть базовый класс, от него идут несколько производных классов, от которых, в свою очередь, идут свои производные классы.
Набросал упрощенный вариант, одного из ветвлений:
Как можно организовать подобное, так чтобы, когда я создаю класс Class2 не инициировались поля суперкласса?(name, price)
PS. В моем случае там будет null и 0.
Листинг программы
- using System;
- using System.Linq;
- namespace Test_01
- {
- class Program
- {
- static void Main(string[] args)
- {
- BaseClass[] baseClass =
- {
- new Class3(new Class2(), "100", 100)
- };
- Console.WriteLine(string.Join("",baseClass.Select(s=>s)));
- Console.ReadKey(false);
- }
- }
- public abstract class BaseClass : IComparable<BaseClass>
- {
- private string _name;
- private double _price;
- protected string Name
- {
- get { return _name; }
- set { _name = value; }
- }
- protected double Price
- {
- get { return _price; }
- set { _price = value; }
- }
- protected BaseClass()
- {
- }
- public BaseClass(string name, double price)
- {
- _name = name;
- _price = price;
- }
- public int CompareTo(BaseClass other)
- {
- throw new NotImplementedException();
- }
- }
- abstract class Class1 : BaseClass
- {
- private string _text;
- protected string Text
- {
- get { return _text; }
- set { _text = value; }
- }
- protected Class1(string name, double price)
- : base(name, price)
- {
- }
- protected Class1()
- {
- }
- public virtual string GetText()
- => Text;
- }
- abstract class Class1Dec : Class1
- {
- protected Class1Dec(string name, double price)
- : base(name, price)
- {
- }
- }
- class Class2 :Class1
- {
- public Class2()
- {
- this.Text = "Hello";
- }
- }
- sealed class Class3 : Class1Dec
- {
- Class1 _class1;
- public Class3(Class1 class1, string name, double price)
- : base(name, price)
- {
- _class1 = class1;
- }
- public override string GetText()
- {
- return _class1.GetText() + " World!";
- }
- public override string ToString()
- {
- return this.GetText();
- }
- }
- }
Решение задачи: «Как не инициировать поля базового класса в его производных классах?»
textual
Листинг программы
- 1) BaseClass
- 2) protected BaseClass() {}
- 3) Class1 : BaseClass
- 4) protected Class1(){}
- 5) class Class2 :Class1
- 6) public Class2(){//todo:}
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д