我们制作具有私人构造函数的类的对象吗?

时间:2012-01-18 07:27:25

标签: c# constructor private-members

有人问我,我们是否有一个具有私有构造函数的类的对象

对于E.g

    Class Parent
    {
        Private Parent()
        {
        }
    }

因为我为类Parent.so创建了一个私有构造函数,很明显我们不能创建Parent类的对象。但是有没有办法在不将私有构造函数更改为public的情况下创建Parent类对象?

先谢谢

5 个答案:

答案 0 :(得分:3)

您无法在该类之外创建Parent 的实例,但是:

  • 如果父类中的嵌套类,您仍然可以创建派生自Parent的类,并且这些类可以构建非私有类。
  • Parent类型中的代码(包括静态方法,最常见)可以创建Parent的实例,因此您可能拥有静态工厂方法,但不直接公开任何构造函数。例如:

    public class Parent
    {
        private Parent {}
    
        public static Parent CreateParent()
        {
            return new Parent();
        }
    }
    

如果你想在创建一个类型的实例之前应用参数验证(等),那么有时这种方法很有用,因此你想通过命名工厂强制一切方法。这也可以使代码更容易阅读,特别是如果您想要使用不同的方法从相同数量的值创建实例。 TimeSpan.FromSecondsTimeSpan.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通常用于某些语言的方式。