Diseño de constructores de tipos

Los constructores de tipo se utilizan para inicializar los datos estáticos en un tipo. Common Language Runtime (CLR) los llama antes de crear cualquier instancia del tipo. Los constructores de tipos son static (Shared en Visual Basic) y no pueden tomar parámetros.

Las instrucciones siguientes ayudan a garantizar que su uso de constructores estáticos obedece a los procedimientos recomendados.

Haga que los constructores de tipo sean privados.

Para inicializar un tipo se utiliza un constructor de tipo, también denominado constructor de clase o constructor estático. CLR llama al constructor de tipo antes de que se cree la primera instancia del tipo o de que se llame a cualquier miembro estático del tipo. Si un constructor de tipo no es privado, se puede llamar a través de código distinto de CLR. Dependiendo de las operaciones realizadas en el constructor, esto puede producir un comportamiento inesperado.

No inicie excepciones desde los constructores de tipo.

Si un constructor de tipo inicia una excepción, el tipo no es utilizable en el dominio de aplicación en el que se inició la excepción.

Considere la posibilidad de inicializar campos estáticos en línea en lugar de utilizar explícitamente constructores estáticos porque CLR puede optimizar el rendimiento de los tipos que no tienen un constructor estático definido explícitamente.

El ejemplo de código siguiente muestra un diseño que no se puede optimizar.

Public Class BadStaticExample
    Shared runId as Guid
    Shared Sub New()
        runId  = Guid.NewGuid()
    End Sub
    ' Other members...
End Class
public class BadStaticExample
{
    static Guid runId;
    static BadStaticExample()
    {
        runId  = Guid.NewGuid();
    }
    // Other members...
}
public ref class BadStaticExample
{
    static Guid runId;
    static BadStaticExample()
    {
        runId  = Guid::NewGuid();
    }
    // Other members...
};

El ejemplo de código siguiente sí se puede actualizar.

Public Class GoodStaticExample
    Shared runId as Guid = Guid.NewGuid()
    ' Other members...
End Class
public class GoodStaticExample
{
    static Guid runId  = Guid.NewGuid();
    // Other members...
}
public ref class GoodStaticExample
{
    static Guid runId  = Guid::NewGuid();
    // Other members...
};

Portions Copyright 2005 Microsoft Corporation. Reservados todos los derechos.

Portions Copyright Addison-Wesley Corporation. Reservados todos los derechos.

Para obtener más información sobre las directrices de diseño, consulte “las instrucciones de diseño de Framework: Convenciones, frases realizadas y modelos para libro de bibliotecas reutilizables de .NET” de Krzysztof Cwalina y Brad Abrams, publicados por Addison-Wesley, 2005.

Vea también

Conceptos

Diseño de constructores

Otros recursos

Instrucciones de diseño de miembros

Instrucciones de diseño para desarrollar bibliotecas de clases