¿Cuál es la mejor manera de garantizar que se llame al constructor estático de una clase base?

losdocumentación sobre constructores estáticos en C # dice:

Un constructor estático se usa para inicializar cualquier dato estático, o para realizar una acción particular que necesita realizarse solo una vez. Se llama automáticamenteantes de que se cree la primera instancia o se haga referencia a cualquier miembro estático.

Esa última parte (sobre cuándo se llama automáticamente) me lanzó a un bucle; hasta leer esa parte Ipensamiento que simplemente accediendo a una clasede cualquier manera, Podría estar seguro de que se había llamado al constructor estático de su clase base. Probar y examinar la documentación ha revelado que este no es el caso; parece que el constructor estático para unbase no se garantiza que la clase se ejecute hasta que un miembrode esa clase base específicamente Se accede.

Ahora, supongo que en la mayoría de los casos cuando se trata de una clase derivada, construiría una instancia y esto constituiría una instancia de la clase base que se está creando, por lo que se llamaría al constructor estático. Pero si solo estoy tratando conestático Los miembros de laderivado clase, entonces que?

Para hacer esto un poco más concreto, yopensamiento que el siguiente código funcionaría:

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

Supuse que accediendo alType<T> la clase invocaría automáticamente el constructor estático paraTypeBase; pero este no parece ser el caso.Type<int>.Name esnull, y el código anterior genera la cadena vacía.

Además de crear algún miembro ficticio (como un elemento estáticoInitialize() método que no hace nada),¿Hay una mejor manera de garantizar que se invoque al constructor estático de un tipo base antes de utilizar cualquiera de sus tipos derivados?

Si no, entonces ... ¡miembro ficticio lo es!

Respuestas a la pregunta(6)

Su respuesta a la pregunta