Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 嵌套单例类_C#_Singleton_Nested_Nested Class - Fatal编程技术网

C# 嵌套单例类

C# 嵌套单例类,c#,singleton,nested,nested-class,C#,Singleton,Nested,Nested Class,是否可以在C#中的非单例类中嵌套单例类,如果可以,在这种情况下对单例的生命周期是否有任何限制 public class NonSingletonClass { public NonSingletonClass() { // Initialize some stuff. } // Put some methods here. public class SingletonClass { // Singleton construction goes here

是否可以在C#中的非单例类中嵌套单例类,如果可以,在这种情况下对单例的生命周期是否有任何限制

public class NonSingletonClass
{
  public NonSingletonClass()
  {
    // Initialize some stuff.
  }

  // Put some methods here.

  public class SingletonClass
  {
    // Singleton construction goes here.

    // Put some methods here.
  }
}
在我的应用程序的设计中,这是有意义的,但在实际实现之前,我需要知道任何潜在的陷阱


编辑:具体来说,我有一个作业主机,它根据计时器执行任务。本例中的
NonSingletonClass
是任务的实例化。
SingletonClass
是由
NonSingletonClass
使用的数据存储库,但可以从
NonSingletonClass
外部进行修改
SingletonClass
的存在是为了确保即使存在多个
NonSingletonClass
实例,所有实例仍然只有一组指令和数据。

我相信您正在寻找一种单状态模式

这个链接很好地描述了这一点,并提供了带有单例模式的合同

我相信您正在寻找一种单一国家模式

这个链接很好地描述了这一点,并提供了带有单例模式的合同

是的,单身人士可以完全舒适地生活在非单身人士的家中

嵌套类的生命周期完全独立于外部类的生命周期。C#中的嵌套类和非嵌套类之间几乎没有什么区别。(有一些区别-嵌套类可以访问外部类的私有成员,例如,扩展方法必须位于非嵌套静态类中-但它不会影响生命周期


你有什么特别的担心吗?

是的,单身人士可以在非单身人士的家里完全舒适地生活

嵌套类的生命周期完全独立于外部类的生命周期。(有一些区别-嵌套类可以访问外部类的私有成员,例如,扩展方法必须位于非嵌套静态类中-但它不会影响生命周期


你有什么特别的顾虑吗?

我想我的第一个问题是,考虑到你说的“我的应用程序的设计很有意义”,你能给我们提供更多的细节吗.Abstract factory和builder只是一些使用singleton类的模式。您是否存储了某种要在非SingletonClass中使用的全局数据。

我想我的第一个问题是,考虑到您所说的“我的应用程序的设计很有意义”,您能给我们提供更多的细节吗.Abstract factory和builder只是一些使用singleton类的模式。您是否存储了某种要在非SingletonClass中使用的全局数据。

考虑到两个类都没有引用另一个类,我认为嵌套的singleton没有任何问题。考虑到您说singletonovides提供了多个实例的可变数据存储,我认为您的潜在问题将与并发相关

只有在允许多线程访问的情况下,这些才适用,也就是说,首先我们必须确保适当的锁处于适当的位置,以便单例始终处于有效状态。其次,如果单例状态正在更改,并且对象以不确定的顺序访问,则结果将是不可预测的(即竞争条件)


如果并发性不是应用程序的问题,我发现使用私有嵌套类是隐藏实现细节和确保每个对象只有一个角色的极好方法。

考虑到两个类都没有引用另一个类,我认为嵌套单例没有任何问题当您说单例为多个实例提供可变数据存储时,我认为您的潜在问题将与并发相关

只有在允许多线程访问的情况下,这些才适用,也就是说,首先我们必须确保适当的锁处于适当的位置,以便单例始终处于有效状态。其次,如果单例状态正在更改,并且对象以不确定的顺序访问,则结果将是不可预测的(即竞争条件)


如果并发性不是应用程序的问题,我发现使用私有嵌套类是隐藏实现细节和确保每个对象只有一个角色的极好方法。

非常好的参考,在
SingletonClass
中的变量实例是否仍然存在于
NonSin的实例化之外gletonClass
?非常好的参考,在
SingletonClass
的实例化之外,
NonSingletonClass
中的变量实例是否仍然存在?我关心的是,如果我的
NonSingletonClass
实例出现严重错误,我的
SingletonClass
会继续响应调用m无障碍地从外部调用
NonSingletonClass
。是的,它们是完全独立的,就像它们是独立的类一样。我关心的是,如果我的
NonSingletonClass
实例出现了可怕的错误,我的
SingletonClass
将继续响应外部
NonSingletonClass
发出的调用,并且是的,它们是完全独立的,就像它们是独立的类一样。