我定义了以下类结构:
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”修饰符会引发编译错误。
为什么需要将 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)