Qual é a melhor maneira de garantir que o construtor estático de uma classe base seja chamado?

odocumentação sobre construtores estáticos em C # diz:

Um construtor estático é usado para inicializar qualquer dado estático ou para executar uma ação específica que precisa ser executada apenas uma vez. É chamado automaticamenteantes da criação da primeira instância ou de referência a qualquer membro estático.

Essa última parte (aproximadamente quando é chamada automaticamente) me jogou para um loop; até ler essa parte Ipensamento simplesmente acessando uma classede qualquer maneira, Eu poderia ter certeza de que o construtor estático de sua classe base havia sido chamado. Testar e examinar a documentação revelaram que esse não é o caso; parece que o construtor estático para umbase não é garantido que a classe seja executada até que um membrodessa classe base especificamente é acessado.

Agora, acho que na maioria dos casos, quando você está lidando com uma classe derivada, você constrói uma instância e isso constitui uma instância da classe base que está sendo criada, assim o construtor estático seria chamado. Mas se eu estou lidando apenas comestático membros dederivado aula, o que então?

Para tornar isso um pouco mais concreto, eupensamento que o código abaixo funcionaria:

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);
}

Eu assumi que acessar oType<T> A classe chamaria automaticamente o construtor estático paraTypeBase; mas isso parece não ser o caso.Type<int>.Name énull, e o código acima gera a sequência vazia.

Além de criar algum membro fictício (como um estáticoInitialize() método que não faz nada),existe uma maneira melhor de garantir que o construtor estático de um tipo base seja chamado antes que qualquer um de seus tipos derivados seja usado?

Se não, então ... membro fictício é!

questionAnswers(6)

yourAnswerToTheQuestion