Просто идея, вы можете сделать что-то вроде этого:

ментация по статическим конструкторам в C # говорит:Статический конструктор используется для инициализации любых статических данных или для выполнения определенного действия, которое необходимо выполнить только один раз. Вызывается автоматически

до создания первого экземпляра или ссылки на статические элементыЭта последняя часть (о том, когда он вызывается автоматически) заставила меня задуматься; пока не прочитал эту часть I.

подумал что просто доступ к классув любом случаеЯ мог быть уверен, что был вызван статический конструктор его базового класса. Тестирование и проверка документации показали, что это не так; кажется, что статический конструктор длябаза класс не гарантированно работает, пока членэтого базового класса конкретно ДоступТеперь, я думаю, в большинстве случаев, когда вы имеете дело с производным классом, вы должны создать экземпляр, и это будет представлять собой экземпляр создаваемого базового класса, таким образом, будет вызван статический конструктор. Но если я имею дело только с

статический членыполученный класс, что тогда?Чтобы сделать это немного конкретнее, я

подумал что код ниже будет работать:Я предположил, что доступ к

abstract class TypeBase
{
    static TypeBase()
    {
        Type<int>.Name = "int";
        Type<long>.Name = "long";
        Type<double>.Name = "double";
    }
}

class Type<T> : TypeBase
{
    public static string Name { get; internal set; }
}

class Program
{
    Console.WriteLine(Type<int>.Name);
}

 класс будет автоматически вызывать статический конструктор дляType<T>; но, похоже, дело не в этом.TypeBase являетсяType<int>.Nameи код выше выводит пустую строку.nullПомимо создания некоторого фиктивного члена (как статический

 метод, который ничего не делает),Initialize()Есть ли лучший способ гарантировать, что статический конструктор базового типа будет вызываться перед использованием любого из его производных типов?Если нет, то ... это пустышка!

Если это не пример кода только ради вопроса, не могли бы вы просто сделать

Ответы на вопрос(6)

Ваш ответ на вопрос