静态属性和单例有什么区别?

2023-12-29

使用 C# 实现的单例可能类似于:

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

如果我使用 static 来实现它,如下所示:

public static class Globals{
  public static Singleton Instance = new Singleton();
}

这样,应用程序也应该只获取整个应用程序的一个实例。 那么这两种方法有什么区别呢?为什么不直接使用静态成员(更简单直接)?


如果使用第二种方法:

public static class Globals{
  public static Singleton Instance = new Singleton();
}

没有什么可以阻止某人做:

Singleton anotherInstance = new Singleton(); // Violates singleton rules

您也不会获得与您的第一个版本(尝试)实现的相同的延迟初始化,而且您使用的是公共字段,如果您需要更改值时发生的情况,它不允许您在将来获得相同的灵活性已获取。

请注意,.NET 4 提供了一种可能更好的创建单例的方法:

public class Singleton
{
   private static readonly Lazy<Singleton> instance = new Lazy<Singleton>( ()=> new Singleton());

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         return instance.Value;
      }
   }
}

这很好,因为它完全是懒惰的and完全线程安全,但也很简单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态属性和单例有什么区别? 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 确定一组日期的事件重复模式

    我正在寻找一种模式 算法或库 它将采用一组日期并在退出时返回重复的描述 即集合 11 01 2010 11 08 2010 11 15 2010 11 22 2010 11 29 2010 会产生类似 十一月的每个星期一 的结果 有没有人以
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 使用 C# 读取 Soap 消息

  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • 将别名@导入重构为相对路径

    在使用 Webpack TypeScript 或其他转换 ES 模块导入的工具的模块化环境中 使用路径别名 一个常见的约定是 for src https stackoverflow com questions 42711175 what d
  • 如何在 XAML 中将 DependencyProperty 重置回默认值

    我正在实现一个用户可调的Effect使用滑块 滑块旁边有一个重置按钮 这个想法是允许用户重置回默认值Effect的属性在元数据中指定 我认为在 XAML 中执行此操作可能很简单 依赖属性实际上没有默认值 如果依赖属性没有本地值 它将通过值继
  • 声纳:声纳如何工作?

    我们希望在我们的项目中将 SonarQube 与一些 CI 工具一起使用 Sonar Server url 在 main 中配置pom xml 该项目有多名团队成员 那么当一名团队成员执行死刑时会发生什么声纳 声纳本地进行本地更改 然后另一
  • 获取 ios 中可用蓝牙设备的列表

    有没有办法在ios中获取可用蓝牙设备的mac地址列表 我正在开发一个程序 它可以使用蓝牙 MAC 地址查找附近的人 我确定你有 centralManager scanForPeripheralsWithServices nil option
  • 的后备图片

    Is
  • python ctype 递归结构

    我用 C 语言为驱动程序开发了一个 DLL 我用 C 编写了一个测试程序 该 DLL 工作正常 现在我想使用 Python 与这个 DLL 进行交互 我已经成功隐藏了大部分用户定义的 C 结构 但有一点我必须使用 C 结构 我对 pytho
  • Solr 和 Zookeeper 配置

    在生产环境中 是否应该在每台可能的服务器上设置 Solr 包括具有 Zookeeper 的服务器 谈论外部Zookeeper 服务器总数 5 情况1 所有 5 台服务器上都有 Solr Zookeeper 在 3 台服务器上 案例2 Sol
  • CodeAnalysis 是否会返回 CA2202 误报?或者我的代码真的有问题吗?

    我遇到了同样的问题解释here https stackoverflow com questions 29528876 for each loop with a collection of class instances multiple d
  • django更改tinymce中的字体大小和字体系列

    我的基本文件中有这个脚本
  • 使用 Retrofit POST 正文 JSON

    我正在尝试使用 Retrofit 库发布 JSONObject 但是当我在接收端看到请求时 内容长度为0 在RestService接口中 Headers Content type application json POST api v1 u
  • iOS 8 更改方向后无法调整模态表单的大小

    实际上我正在做的是在 iPad 上呈现模态形式 我自己的尺寸 520 X 400 第一次运行得很好 然后当我旋转时 纵向到横向或横向到纵向 我的模态表单更改为 ios 默认大小 另外 我没能 以编程方式再次更改模式表单尺寸 自从 一旦方向改
  • Heroku 应用程序崩溃,日志显示“No such file to load -- nokogiri (LoadError)”

    我有一个工作应用程序 添加了 Nokogiri 用于解析一些 xml 在本地运行良好 我的 Gemfile 包括 gem nokogiri I ran bundle install并验证了我的 Gemfile lock 包括DEPENDEN
  • R中的预分配列表

    在 R 中 在循环中扩展数据结构效率很低 我如何预分配list具有一定的尺寸 matrix通过以下方式可以轻松做到这一点ncol and nrow论据 如何在列表中做到这一点 例如 x lt list for i in 1 10 x i l
  • 如何找到实体框架的水晶报表?

    如何将 Crystal Reports 绑定到实体框架实体 我确实还没有找到解决方法 而且我还没有足够的积分来对现有问题进行投票 至于我 我阅读了下面的链接 http aspalliance com 2049 Use LINQ to Ret
  • 使用IoC时单元测试的策略应该是什么?

    在读完有关依赖注入和 IoC 的所有内容后 我决定尝试在我们的应用程序中使用 Windsor Container 它是一个 50K LOC 多层 Web 应用程序 所以我希望它不是一个矫枉过正的东西 我使用了一个简单的静态类来包装容器 并在
  • 修复我的网络活动指示器

    我的网络活动指示器有一个问题 有时它会在不应该显示的情况下继续显示 我为它编写了自己的管理器 并将其替换为使用NSAssert像这样的声明 void setNetworkActivityIndicatorVisible BOOL setVi
  • 如何在 Eclipse 中的 Android 库项目中引用外部 jar

    哦 安卓 我多么喜欢你的言辞 我有一个工作区 里面有一些项目 App1和App2是Android应用程序 Common是一个Android库项目 App1 和 App2 依赖于 Common 通过 Android 选项卡链接 Common
  • 更新命令行应用程序状态

    我有一个命令行应用程序 当前打印增加的百分比 1 2 3 4 输出是连续的 但我见过命令行工具显示更改 就好像它是内联更新一样 1 2 与第一个位置相同 3 与第一个位置相同 4 与第一个位置相同 我怎样才能做到这一点 我正在使用 Java
  • 将 3 列文件转换为矩阵格式

    我有一个如下例所示的文件格式 显示了 5 个人 包括他们自己 之间的关系 1 1 1 0 2 1 0 5 3 1 0 1 4 1 0 3 5 1 0 1 2 2 1 0 3 2 0 5 4 2 0 2 5 2 0 3 3 3 1 0 4 3
  • 静态属性和单例有什么区别?

    使用 C 实现的单例可能类似于 public class Singleton private static Singleton instance private Singleton public static Singleton Insta