我一直想知道是否有可能拥有私人类?而且,有这样的课程会有什么意义呢?
感谢您的帮助。
答案 0 :(得分:19)
是的,可以有一个私有类,但只能作为另一个类的内部类:
public class Outer
{
private class Inner
{}
}
当您想要将某些逻辑封装在类(外部逻辑)中时,这通常很有用,但需要更加结构化/ OO设计的代码来实现它。我曾经使用过这种模式,当我需要一个容器类来处理类方法中的一些信息时,容器类在这个逻辑之外没有任何意义。使容器类成为私有内部类意味着它的使用本地化到使用它的外部类。
值得注意的是,通过这种结构,内部类可以访问外部类的私有成员,但不能反过来。
答案 1 :(得分:3)
拥有私有非嵌套类(仅对其命名空间和子命名空间可见)将允许在同一程序集中编程时清除代码边界。
例如,只有一个接口和一个工厂从同一个程序集中的其他名称空间可见,同时仍然具有接口和实用程序类的所有实现(没有人知道在命名空间之外)。
仍然可以通过替换命名空间和嵌套类的大型部分类来实现它,但这是一个非常糟糕的黑客,单元测试变得几乎不可能。
答案 2 :(得分:2)
是的,你可以 - 通常它们是另一种类型的嵌套类。这意味着您可以将逻辑聚合到嵌套类中,而不会将类暴露给任何其他类。内部对嵌套类也很有用。
但请注意,对于需要嵌套类的设计存在一些争论 - 我倾向于在它们看起来很合适时使用它们。
答案 3 :(得分:2)
你可以在另一个班级内拥有私人班级。
您可以使用私有类来封装逻辑和实现。例如,您可以在ICollection的实现中声明迭代器的实现。