- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的代码中需要一个单例。我读了 Jon Skeet 的 page在单例上并根据他的推荐选择了这个模型(#4):
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton(){}
private Singleton(){}
public static Singleton Instance
{
get
{
return instance;
}
}
}
然后我通过几个步骤修改它以适应我的场景:
第 1 步:我不需要惰性实现,所以我去掉了静态构造函数(正如 Jon 在其文章末尾所建议的):
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton(){}
public static Singleton Instance
{
get
{
return instance;
}
}
}
第 2 步:然后我将“实例”Singleton
类替换为我正在使用的Logging
类:
public sealed class Singleton
{
private static readonly Logging instance = new Logging();
private Singleton(){}
public static Logging Instance
{
get
{
return instance;
}
}
}
第 3 步:然后 Resharper 告诉我应该为我的“实例”属性使用自动属性:
public sealed class Singleton
{
private Singleton(){}
public static Logging Instance { get; } = new Logging();
}
第 4 步:然后 Resharper 告诉我应该将其切换为静态类:
public static class Singleton
{
public static Logging Instance { get; } = new Logging();
}
我留下的与原来的非常不同。我知道在设置线程安全的 Singleton 时很容易出错。
所以我想问:我的任何步骤是否会使我的类不再是一个好的单例实现?
最佳答案
Do any of my steps make my class not a good Singleton implementation any more?
是的,他们有。
无论如何,您在步骤 #1 中删除的行为都是一个实现细节。删除空的静态构造函数就可以了;如果你想强制延迟初始化,Lazy<T>
无论如何,这是一种更好的方法,即使它的开销稍微多一些。
在第 2 步,您的对象完全不再是单例,因为您不再能够控制对象实例 (Logging
) 的创建数量。
我会说,根本不是单例就可以说是“不是一个好的单例实现”。
关于c# - 基于 Jon Skeet 的 Singleton 的更简单的 Singleton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258375/
以下代码摘自 Jon Resig 的书 Secrets of JavaScript Ninja解释如何使用闭包来实现函数的部分应用。但是,我在理解变量 arg 的意图时遇到了问题。为什么需要它以及它如
我认为我对快速排序的工作原理有很好的理解,直到我在 http://code.google.com/edu/algorithms/index.html 上观看了视频。其中 Jon Bentley 介绍了
为了简单的模块间通信,有经典的 .NET 事件,但现在太多了,并且存在通过模块相互调用的事件链。 比如 Event_A 触发 Event_B 触发 Event_C。 EventAggregator 对
我通读了乔恩·斯凯特(Jon Skeet)关于beforefieldinit的article的信息,偶然发现了一个问题。他提到,可以在调用静态字段的第一个引用之前的任何时间调用类型初始值设定项。 这是
作为一个相对新手,我尝试尽可能多地阅读有关特定主题的内容,并尽可能多地测试/编写代码。我在看 Jons Brainteasers 之一(问题 #2)我的输出与答案不同。这让我来到这里询问最近版本是否发
Jon's Brain Teasers 这里是剧透...... 我正在查看 answer到#1,我必须承认我从来不知道过载决议是这种情况。但为什么是是这样呢。在我看来,Derived.Foo(int)
Jon Skeet 有以下 reputation tracker这是由 C# 构建的。 我有兴趣通过 Python 构建一个类似的应用程序,至少使用以下模块 漂亮的汤 默认字典 我们显然需要 解析站点
我阅读了 Skeet 的书的第 2.3.2 节,据我所知,C# 中没有像 C++ 中那样的真正引用。 It's interesting to note that not only is the "by
我正在研究 Jon Skeet 的 Edulinq,我看到了以下代码,第 23 页,他在其中为 Linq 的 Empty() 运算符实现了缓存机制 private static class Empty
public sealed class Singleton { Singleton() {} public static Singleton Instance {
假设我有用户、团队和运动员文档。用户文档有一组与团队 ID 相关的对象。将 key 与用户字段匹配后,我需要在单个查询中从团队获取相关数据。 我有类似下面的东西 "size": 20, "query"
我正在经历这个出色的article Jon Skeet 的 Java 引用语义,他指出 We assume the presence of a procedure named f that takes
/*** Simple jQuery Slideshow Script Released by Jon Raasch (jonraasch.com) under FreeBSD lic
我一直在努力理解 internal 关键字以及何时需要使用它。幸运的是,今天,当我在阅读 Jon Skeet 的书 C# In Depth, 3rd Edition 关于如何实现迭代器时,在第 161
我刚刚看过 Jon Skeet 的视频类(class),他在视频类(class)中谈到单元测试异步方法。它在付费网站上,但我在他的 book 中发现了与他所说的类似的内容。 (只需 Ctrl+F “1
我的代码中需要一个单例。我读了 Jon Skeet 的 page在单例上并根据他的推荐选择了这个模型(#4): public sealed class Singleton { private
在乔恩的 site 上他在 C# 中设计了一个非常优雅的单例,如下所示: public sealed class Singleton { Singleton() { }
我知道the long history of ffmpeg and libav .就个人而言,我更喜欢使用 Jon Severinsson 的 PPA,如 suggested in many answ
有人熟悉 Jon Leighton 的 jquery.date_input.pack 插件吗?我正在尝试将日期格式设置为 yyyymmdd 但我能够做到正确。任何帮助将不胜感激。 这是我尝试使用的代码
我看到了使用 typings.json 的 angular 2 示例: { "globalDependencies": { "core-js": "registry:dt/core-js#
我是一名优秀的程序员,十分优秀!