Как не инициировать поля базового класса в его производных классах? - 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:}