Freigeben über


Typkonstruktorentwurf

Aktualisiert: November 2007

Mit einem Typkonstruktor werden statische Daten in einem Typ initialisiert. Er wird von der Common Language Runtime (CLR) aufgerufen, bevor Instanzen des Typs erstellt werden. Typkonstruktoren sind static (Shared in Visual Basic) und können keine Parameter akzeptieren.

Anhand der folgenden Richtlinien können Sie sicherstellen, dass die Verwendung von statischen Konstruktoren den empfohlenen Vorgehensweisen entspricht.

Legen Sie Typkonstruktoren als private Konstruktoren fest.

Typkonstruktoren, auch als Klassenkonstruktoren oder statische Konstruktoren bezeichnet, werden verwendet, um einen Typ zu initialisieren. Die CLR ruft den Typkonstruktor auf, bevor die erste Instanz des Typs erstellt wird bzw. bevor statische Member für den Typ aufgerufen werden. Wenn ein Typkonstruktor nicht privat ist, kann er von Code aufgerufen werden, der kein CLR-Code ist. Je nach den Operationen innerhalb des Konstruktors kann dies zu unerwartetem Verhalten führen.

Lösen Sie keine Ausnahmen aus Typkonstruktoren aus.

Wenn ein Typkonstruktor eine Ausnahme auslöst, kann der Typ in der Anwendungsdomäne nicht verwendet werden, in der die Ausnahme ausgelöst wurde.

Initialisieren Sie statische Felder inline und nicht explizit mit statischen Konstruktoren, weil die CLR die Leistung von Typen optimieren kann, die über keine explizit definierten statischen Konstruktor verfügen.

Im folgenden Codebeispiel wird ein Entwurf veranschaulicht, der nicht optimiert werden kann.

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...
}

Das folgende Codebeispiel kann optimiert werden.

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

Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.

Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.

Weitere Informationen zu Entwurfsrichtlinien finden Sie im Buch "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" von Krzysztof Cwalina und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.

Siehe auch

Konzepte

Konstruktorentwurf

Weitere Ressourcen

Entwurfsrichtlinien für Member

Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken