У меня есть вопрос, похожий на этот: Могу ли я иметь базовый класс, в котором каждый производный класс имеет собственную копию статического свойства?, но ответ не показался мне очень убедительным.
По сути, у меня есть класс со свойством константы, и я хочу создать класс, который имеет все те же методы, но использует другое значение для переменной. Для простой аналогии представьте, что у меня есть класс, который частично выглядит так:
public class Triangle
{
public const NumSides = 3;
int sideLength;
public int Perimeter()
{
return NumSides * sideLength;
}
}
и теперь я хотел создать класс Square, который был бы точно таким же, как класс Triangle, за исключением того, что NumSides теперь было 4.
Другими словами, мне нужен класс, который теперь полностью выглядит примерно так:
public class Square : Triangle
{
public const NumSides = 4;
}
но он по-прежнему имеет доступ ко всем методам класса Triangle. (Я могу справиться с написанием нового конструктора, если это необходимо, но я не хочу копировать более дюжины или около того методов из исходного класса. Все они должны вести себя точно так же, но теперь NumSides имеет значение из 4.)
Я не могу понять, как это сделать, либо с NumSides, являющимся константой, либо со статическим свойством только с функцией получения. Если я попытаюсь переопределить константу, я получу «Модификатор «переопределение» недействителен для этого элемента». Когда я пытаюсь переопределить версию статического свойства, я получаю сообщение, эквивалентное «Статический элемент Triangle.NumSides не может быть помечен как переопределяемый, виртуальный или абстрактный».
И да, я пытался создать класс Shape, поместив в него всю функциональность, а затем наследовать от этого класса и Triangle, и Square. Однако я столкнулся с той же проблемой с NumSides. Как я могу изменить действующее значение константы или статической переменной/свойства при создании нового класса?