Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# singleton类的几个实例_C#_.net_Design Patterns - Fatal编程技术网

C# singleton类的几个实例

C# singleton类的几个实例,c#,.net,design-patterns,C#,.net,Design Patterns,我有一些类,它是一个单例,我们已经在几个应用程序中使用了这个类,并且它作为单例使用 现在我正在编写一些新的应用程序,我需要该类的几个实例,拥有几个实例的最佳实践是什么 通过从中派生并将私有结构公开,我与c#一起工作 或者这里可能有其他想法 谢谢很简单:不要让它成为单身汉。“single”一词的出现是有原因的。在我看来,如果您需要这个类的多个实例,那么您可以像处理任何其他实例一样处理它,您可以删除类中迫使它成为singleton的任何内容,你可以考虑一个工厂类,它可以被配置成总是返回同一个实例,或

我有一些类,它是一个单例,我们已经在几个应用程序中使用了这个类,并且它作为单例使用

现在我正在编写一些新的应用程序,我需要该类的几个实例,拥有几个实例的最佳实践是什么

通过从中派生并将私有结构公开,我与c#一起工作

或者这里可能有其他想法


谢谢

很简单:不要让它成为单身汉。“single”一词的出现是有原因的。

在我看来,如果您需要这个类的多个实例,那么您可以像处理任何其他实例一样处理它,您可以删除类中迫使它成为singleton的任何内容,你可以考虑一个工厂类,它可以被配置成总是返回同一个实例,或者根据配置或其他标准给出不同的实例。

你所要求的是非常矛盾的。你能定义你的意思吗?不同的词汇


如果现有对象是真正的静态单例对象,那么您可能无法实例化多个实例;为了做到这一点,您需要将每个实例(及其调用方)加载到它们自己的
AppDomain
中,这并不是一件小事,仅仅为了获得多个单例,这将是一个非常大的折衷/hack。

应该只有一个单例。如果你有不止一个,那就不是单身


也许a就是您想要的?

这实际上取决于类作为单例实现的具体方式

如果该类有一个私有的默认构造函数,并且单例实例是通过静态工厂方法创建的,那么您唯一的选择就是从该类派生(只要它没有密封),并在派生类上提供一个公共构造函数来创建多个实例

如果类有一个公共构造函数,并且单例用法只是一个指导,但不是强制的,那么您可以创建尽可能多的实例


但是请注意,如果类被设计为单例,那么它的实现很可能会在内部做出这样的假设,因此拥有多个实例可能会产生意想不到的副作用。您应该真正确保类的实现允许这种使用场景。

单例是一种设计模式,它为您提供了两种保证:

  • 该类将只存在一个实例,并且
  • 此实例是全局可访问的
如果您删除了第一个要求,那么您所拥有的将不再是一个单例。这是一个朴素、老式的全球战略

所以就叫它的真名吧。您需要的是一个简单的全局变量。如果需要,可以用某种惰性初始化逻辑来包装它,但它是全局的,而不是单例的


除此之外。首先不要使用标签。

@AndréPena:请不要使用标签侮辱他人或他们的问题。奇怪的情况。请澄清情况。最好的解决办法是避免单身…在这种情况下的“最佳实践”是从中学习:你的单身一开始就不应该是单身。请记住,下一次你想把某个东西变成单例。这正是我需要的,我从来没有听说过。单例意味着每个实例一个(关键或其他标准)。multiton模式不包含singleton模式不包含的任何内容。维基百科的文章同意:“大多数人和教科书都认为这是一个单独的模式。”喜欢你的答案,但多吨正是我所需要的。