C#中私有构造函数的需求是什么?

dev*_*ull 14 c#

C#中私有构造函数的需求是什么?我把它作为C#测试的问题.

Svi*_*ish 32

例如,如果您有一个只应通过工厂方法创建的类.或者,如果您有构造函数的重载,并且其中一些应该只由其他构造函数使用.可能还有其他原因=)

  • 实际上,当您必须控制类实例化时,可以通过工厂或单例模式. (2认同)

G B*_*G B 12

如果你知道一些设计模式,那很明显:一个类可以在内部创建一个自己的新实例,而不是让别人去做.Java中的一个例子(我不太了解C#,对不起)有一个单例类:

class Meh 
{
  private Meh() { }
  private static Meh theMeh = new Meh();
  public static Meh getInstance() { return theMeh; }
}
Run Code Online (Sandbox Code Playgroud)

  • 非常幽默,这个Java也是有效的C# - 也许你比你想象的更了解C#.;) (17认同)

Meh*_*ari 11

每当你想阻止从它外部直接实例化类时,你将使用private构造函数.例如,在引入static类的C#2.0之前,您使用private构造函数来完成大致相同的事情:

sealed class StaticClass {
     private StaticClass() {
     }
     public static void DoSomething() {
     }
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*sen 9

当您想要阻止类的用户直接实例化该类时.一些常见的情况是:

  • 仅包含静态方法的类
  • 单身


Mou*_*ouk 7

我可以回想起它的一些用法:

  • 您可以在同一个类中使用静态工厂方法
  • 你可以在里面做一些常见的工作,然后从其他结构中调用它
  • 您可以使用它来防止运行时自动添加空结构
  • 它可以从一些模拟和ORM工具(如nhibernate)中使用(尽管是私有的)