私有类中的公共构造函数有什么用

Nic*_*ick -1 c#

我定义了以下类结构:

public sealed class PublicClass
{
    private PrivateClass privateClass;

    public PublicClass()
    {
        this.privateClass = new PrivateClass();
    }

    private sealed class PrivateClass
    {
        public PrivateClass()
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么需要将 PrivateClass 的构造函数设为“public”或“internal”才能在 PublicClass 的构造函数中构造 PrivateClass 的实例?在 PrivateClass 构造函数上使用“protected”或“private”修饰符会引发编译错误。

Eri*_*ips 5

为什么需要将 PrivateClass 的构造函数设为“public”或“internal”才能在 PublicClass 的构造函数中构造 PrivateClass 的实例?

PrivateClass 是 PublicClass 的嵌套类,因此 PublicClass 可以像任何其他字段、属性或方法一样访问它。就像object属性或字段一样,对象的构造函数、属性和方法上的访问修饰符适用于 PublicClass 的访问。

public sealed class PublicClass
{
    // this is private, but public class has access to it
    private PrivateClass privateClass;

    public PublicClass()
    {
      // can't be called, privateClass's ctor/method is private
      // privateClass = newPrivateClass();

      // can be called, this static method is public
      privateClass = PrivateClass.GetInstance();

      // can't be called, it's private
      // privateClass.DoWork();
    }

    // this is private, but public class has access to it
    private sealed class PrivateClass
    {

        private PrivateClass()
        {
        }

        public static PrivateClass GetInstance()
        {
          // can be called within the class itself, it has
          // access to private's (method, fields, properties, ctors)
          return new PrivateClass();
        }

        private void DoWork() { }
    }
}
Run Code Online (Sandbox Code Playgroud)