c# – 自动属性初始化器Singleton实现
因此,使用全新的C#6,我们获得了那些整洁的自动属性初始化器.我想我也可以利用这些来制作比以往更简洁的单身人士.显然
someone else也有这个想法.
public sealed class Singleton { public static Singleton Instance { get; } = new Singleton(); private Singleton() { /* some initialization code */ } } 我的问题是: >它的线程安全性如何? (它看起来可能类似于this question,但事实并非如此) 解决方法
您的代码将扩展为以下内容:
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 */ } } (< Instance> k__BackingField是编译器生成的字段的unspeakable name.) 因此,代码的属性将与上面的代码完全相同.也就是说,这种模式是线程安全的,根据具体情况,它可能是一个好主意. 假设您在访问Instance之前没有访问此类型的任何其他静态成员,那么确切的懒惰程度取决于运行时.通常,它将类似于“实例是第一次创建可以访问Instance的方法是JIT编译的”,但您对此没有任何保证. 如果要确保在第一次访问Instance之前创建实例,请在类中添加一个空的静态构造函数. (这可能会对性能产生很小的负面影响,但这对您来说可能无关紧要.) 由于大部分内容并非真正针对C#6,因此Jon Skeet关于singletons和static constructors/type initializers的文章将提供更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQlite数据库的C编程接口(三) 预处理语句(Prepared Stat
- 使用ajax根据部门id获取职务信息
- c – 从Windows转移到Ubuntu
- postgresql – OS X上的Postgres找不到postgis扩展控制文件
- 正则表达式 – 什么是全球接受的正则表达式来匹配电子邮件地
- 基于vue-cli配置lib-flexible + rem实现移动端自适应
- XML文件解析&操作&与JSON比较
- 通过聚合SQL审计记录来衡量应用程序性能
- nxp lpc1850 外部flash算法 jlink下载配置 和 内部sram下载
- c# – 在Linq和Entity Framework中使用内联表值函数