有人问我,我们是否有一个具有私有构造函数的类的对象
对于E.g
Class Parent
{
Private Parent()
{
}
}
因为我为类Parent.so创建了一个私有构造函数,很明显我们不能创建Parent类的对象。但是有没有办法在不将私有构造函数更改为public的情况下创建Parent类对象?
先谢谢
答案 0 :(得分:3)
您无法在该类之外创建Parent
的实例,但是:
Parent
的类,并且这些类可以构建非私有类。 Parent
类型中的代码(包括静态方法,最常见)可以创建Parent
的实例,因此您可能拥有静态工厂方法,但不直接公开任何构造函数。例如:
public class Parent
{
private Parent {}
public static Parent CreateParent()
{
return new Parent();
}
}
如果你想在创建一个类型的实例之前应用参数验证(等),那么有时这种方法很有用,因此你想通过命名工厂强制一切方法。这也可以使代码更容易阅读,特别是如果您想要使用不同的方法从相同数量的值创建实例。 TimeSpan.FromSeconds
,TimeSpan.FromMinutes
等就是很好的例子。
答案 1 :(得分:1)
是的,您可以访问Parent
类中的私有构造函数。因此,这是允许的:
class Parent
{
private Parent()
{
}
public static Parent Create()
{
return new Parent();
}
}
答案 2 :(得分:1)
您可以使用Reflection
,但这可以被视为作弊以绕过原始设计。
如果您拥有该类,则应该通过在Parent类中包含一个返回对象实例的静态方法来使用Factory
。
答案 3 :(得分:0)
这是单例设计模式的实现方式之一。您可以在类中使用公共静态字段,也可以使用getter。加载类时,将创建其中的实例,您将无法在类外创建新实例,但您将能够获得唯一的实例。 Here就是一个例子。
答案 4 :(得分:0)
您可以在该类中编写一个公共静态方法,该方法创建此类的对象并将其返回。这就是Singleton Pattern通常用于某些语言的方式。