我们是否使类的对象具有私人构造器

本文关键字:构造器 对象 是否 我们 | 更新日期: 2023-09-27 18:20:41

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

例如

    Class Parent
    {
        Private Parent()
        {
        }
    }

由于我为类 Parent.so 制作了一个私有构造函数,很明显我们不能制作父类的对象,但是有没有办法在不将私有构造函数更改为公共的情况下使父类对象?

提前致谢

我们是否使类的对象具有私人构造器

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

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

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

在创建类型的实例之前应用参数验证(等(,并且因此希望通过命名工厂方法强制使用所有内容,则使用这种方法有时很有用。这还可以使代码更易于阅读,特别是如果您希望使用不同的方式来从相同数量的值创建实例。 TimeSpan.FromSecondsTimeSpan.FromMinutes等就是很好的例子。

是的,您可以在Parent类中访问私有构造函数。因此,这是允许的:

class Parent
{
    private Parent()
    {
    }
    public static Parent Create()
    {
        return new Parent();
    }
}
您可以使用

Reflection但这可以被视为作弊以绕过原始设计。

如果您拥有该类,则应通过在返回对象实例的 Parent 类中包含静态方法来利用Factory

这是实现单例设计模式的方式之一。您可以在类中拥有一个公共静态字段和它的获取器。加载类时,将创建其中的实例,您将无法在类之外创建新实例,但您将能够获得唯一的实例。下面是一个示例。

您可以在该类中编写一个公共静态方法,该方法创建此类的对象并返回它。这就是单例模式在某些语言中通常应用的方式。