Существуют ли способы "заставить" перезаписывать значение переменной во всех поколениях дочерних классов в c#?
Я пытаюсь сделать библиотеку, в которой у многих объектов будет возможность построения из стороннего файла данных динамически. Для того, чтобы упростить создание этих файлов данных, я решил добавить поддержку сокращений, реализовав это через класс Alias. Вот его примерный код:
/// <summary>
/// Класс, описывающий возможные сокращения для указанного типа.
/// </summary>
public class Alias
{
/// <summary>
/// Массив со значениями сокращений, за которые отвечает этот экземпляр.
/// </summary>
public readonly string[] Aliases;
/// <summary>
/// Создаёт новый список допустимых сокращений для указанного типа.
/// </summary>
/// <param name="acceptableAliases"></param>
public Alias(params string[] acceptableAliases)
{
Aliases = acceptableAliases;
}
/// <summary>
/// Проверяет, является ли строка одним из указанных сокращений.
/// </summary>
/// <param name="test"></param>
/// <returns></returns>
public bool Check(string test)
{
return Aliases.Any(x => x == test);
}
}
Затем, в любой элемент, который должен иметь возможность построения с помощью этих сокращений, я добавляю статическое свойство, которое будет хранить эти сокращения:
public class Message : TextBlock, ITemporary
{
protected new static Alias Aliases => new Alias("message", "msg");
И для каждого элемента я создаю новую переменную, которая перекрывает старую. Но я не думаю, что это удобно. Этих поколений много, и все элементы по цепочке наследуются от одного общего класса
Существует ли способ сделать статическое свойство/поле только для чтения в родительском классе так, чтобы в каждом потомке для любого поколения нужно было бы только выставить другое значение?
Либо, если существует другой, более удобный способ справиться с этой задачей, хотелось бы узнать его.
У каждого элемента данная переменная должна быть уникальной, например у класса GroupBox один список допустимых значений один:
public class GroupBox : Control, IContainer<Control>
{
protected new static Alias Aliases => new Alias("groupbox", "group-box", "container", "group", "div");
У класса Menu, который от него наследуется, уже другой:
public class Menu : GroupBox
{
protected new static Alias Aliases => new Alias("menu");