代码检查:空构造函数
在类中使用空构造函数(无论是静态的还是非静态的)是多余的,ReSharper 会对此发出警告。
然而,有一种特殊情况需要使用空的静态构造函数。 在尝试在 .NET 4.0 之前的版本中实现单例模式时(即,在出现 Lazy<T> 类型之前),有时会使用以下构造:
class Singleton
{
static readonly Singleton instance = new Singleton();
private Singleton() {}
public static Singleton Instance
{
get { return instance; }
}
static Singleton()
{
// this constructor is necessary
}
}
在上述情况下,空的静态构造函数实际上是一个必要的细节,能够保证延迟初始化。 空的静态构造函数可以防止类型被标记为 beforefieldinit 标志。 当类型未被标记为 beforefieldinit 时,类型的初始化方法会在首次访问静态或实例字段,或首次调用任何实例、虚拟或静态方法时执行。 因此,在上述示例中,空的单例确保类型仅在首次访问时才会被初始化。
希望利用此行为的开发者应禁用此特定警告。 请注意,自 C# 4.0 起,实现单例模式有一种更简单且更安全的方法:
public class MyClass
{
private static readonly Lazy<MyClass> instance = new Lazy<MyClass>(() => new MyClass());
private MyClass(){}
public static MyClass Instance
{
get { return instance.Value; }
}
}
最后修改日期: 2025年 9月 27日