c# - 如何在 C# 中重置单例实例?

标签 c# singleton

是否有办法在用户更新数据库时强制重置单例实例?

public class Example{
      private Dictionary<int, string> _list;

      private Example(){
        _list = new Dictionary<int, string>();
        //Get data from database here and add the data to _list
      }

      private class Nested{ 
          static Nested(){}
          internal static readonly Example Instance = new Example();
      }

      public static Dictionary<int, string> GetExample(){
         return Nested.Instance._list
      }

}

那么,我应该在更新数据库时重置 _list 吗?

谢谢!

最佳答案

简短的回答是:不。

最接近的是重置字典:

public void Reset(){ _list.Clear(); }

现在是长答案...

为什么要使用单例?我假设这是因为您阅读了 GoF 设计模式书并认为它看起来是一个有趣的想法。单例模式打破了面向对象设计的每一个原则。你不能从它们继承,你破坏了封装并且没有多态性的机会。

在您发布的示例中,您将类(class)的内部运作(字典)交给任何需要它的人。如果他们改变它怎么办?这将如何与线程一起工作?

如果您只想在您的应用程序中使用您的类的一个实例,那么只需调用一次 new,或者使用具有单例生活方式的依赖注入(inject)容器,但这完全是另一个话题。

呃,我讨厌单例。

关于c# - 如何在 C# 中重置单例实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198149/

相关文章:

c# - IComparer 接口(interface),比较许多对象而不仅仅是两个实例

c# - 如何使 PDF 文档在 asp.net c# razor view 中响应地缩放 100% 的视口(viewport)

c++ - 单例的每个核心设计的 IO 服务

service - 在 Angular 2 中使用服务单例作为数据源的示例

android - 应用程序退出时如何销毁静态字段?

C#。如何将高斯钟形曲线应用于我的峰值?

c# - 将字符串转换为时间

c# - 两次 Socket.BeginReceive 调用之间的 TCP 数据包会发生什么情况?

Objective-C,需要帮助创建一个 AVAudioPlayer 单例

java - 单例实现示例