类型构造函数设计

类型构造函数用于初始化类型中的静态数据。 它由公共语言运行时 (CLR) 在创建类型的任何实例之前调用。 类型构造函数是 static(在 Visual Basic 中为 Shared)方法,不能带任何参数。

下列准则有助于确保您使用静态构造函数的方法符合最佳做法。

一定要将类型构造函数设为私有。

类型构造函数(也称为类构造函数或静态构造函数)用于初始化类型。 CLR 在创建类型的第一个实例或调用类型上的任何静态成员之前调用类型构造函数。 如果类型构造函数不是私有的,则它可由 CLR 以外的代码调用。 根据在构造函数中执行的操作的不同,这可能导致意外行为。

不要从类型构造函数引发异常。

如果类型构造函数引发异常,则该类型在引发异常的应用程序域中不可用。

考虑以内联方式初始化静态字段而不是显式使用静态构造函数,因为 CLR 可以优化没有显式定义的静态构造函数的类型的性能。

下面的代码示例演示了一个不能优化的设计。

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

下面的代码示例可以优化。

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

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

概念

构造函数设计

其他资源

成员设计准则

类库开发的设计准则