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

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

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

У меня есть базовый класс, от него идут несколько производных классов, от которых, в свою очередь, идут свои производные классы. Набросал упрощенный вариант, одного из ветвлений:
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();
        }
    }
}
Как можно организовать подобное, так чтобы, когда я создаю класс Class2 не инициировались поля суперкласса?(name, price) PS. В моем случае там будет null и 0.

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

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

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


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

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

12   голосов , оценка 4 из 5
Похожие ответы