可以在C#中使用带有非默认构造函数的单例吗?

sro*_*uez 3 c# singleton default-constructor

我正在为我的一个项目实现一个通知框架.由于我希望它非常通用,用户可以使用多个传输层,因此他并不需要关心使用一种传递方法(比如说WCF)或另一种传递方法(例如ActiveMQ).用户可以访问的界面当然与传递方法(WCF或ActiveMQ)无关.尽管如此,这两个类(消费者和生产者)实现了单例,因此它们实际上使用默认构造函数(意思是没有参数).我的问题是,我想有一个参数,用户想要使用的交付方法.但据我所知,单身人士只使用默认构造函数?这是正常的,因为没有必要使用带参数的单例.那么,我的选择是什么?不要创建一个单身人士?创建一个设置交付方式的方法?

非常感谢您的帮助,

塞巴斯蒂安

Alb*_*oPL 5

你当然可以使用单例参数,除了不将参数传递给构造函数,你将它传递给getInstance()方法.您的被覆盖的构造函数当然需要是私有的,才能实现真正的单例实现.我的例子是用Java编写的,但也适用于C#.

例:

Singleton s = Singleton.getInstance(42);
Run Code Online (Sandbox Code Playgroud)

在Singleton代码中:

private Singleton() {

}

private Singleton(int num) {
   //set num
}

public getInstance(int num) {
  //singleton code (calls the private non-default constructor if an object 
  //does not already exist) 
}
Run Code Online (Sandbox Code Playgroud)

  • 如果在程序的生命周期中有人调用`Singleton.getInstance(43);`?那会发生什么或者意味着什么? (2认同)