Существуют ли способы "заставить" перезаписывать значение переменной во всех поколениях дочерних классов в 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");

Ответы (0 шт):