Ali*_*ice 8 .net c# singleton automatic-properties c#-6.0
因此,使用全新的C#6,我们获得了那些整洁的自动属性初始化器.我想我也可以利用这些来制作比以往更简洁的单身人士.显然其他人也有这个想法.
public sealed class Singleton
{
public static Singleton Instance { get; } = new Singleton();
private Singleton() { /* some initialization code */ }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
(它可能看起来与这个问题类似,但事实并非如此)
您的代码将扩展为以下内容:
public sealed class Singleton
{
private static readonly Singleton <Instance>k__BackingField = new Singleton();
public static Singleton Instance { get { return <Instance>k__BackingField; } }
private Singleton() { /* some initialization code */ }
}
Run Code Online (Sandbox Code Playgroud)
(<Instance>k__BackingField是编译器生成的字段的不可描述的名称.)
因此,代码的属性将与上面的代码完全相同.也就是说,这种模式是线程安全的,根据具体情况,它可能是一个好主意.
假设您在访问之前没有访问此类型的任何其他静态成员Instance,那么确切的懒惰程度取决于运行时.通常,它将类似于"实例是第一次创建可以访问的方法Instance是JIT编译的",但您对此没有任何保证.
如果要确保Instance在第一次访问之前创建实例,请在类中添加一个空的静态构造函数.(这可能会对性能产生很小的负面影响,但这对您来说可能无关紧要.)
由于大部分内容并非真正针对C#6,因此Jon Skeet关于单例和静态构造函数/类型初始化器的文章将提供更多信息.
| 归档时间: |
|
| 查看次数: |
1284 次 |
| 最近记录: |