公共内部阶级

时间:2010-08-11 14:10:11

标签: c# java .net

任何人都可以解释,为什么我们可以做这样的事情以及为什么我们需要这个

public class OuterClass
{
  public class InnerClass 
  {
  }
}

为什么我们需要公共内部的东西:struct,class,enum或static class?

我认为如果它是内在的那么它必须是私有的或受保护的。

4 个答案:

答案 0 :(得分:12)

您通常不需要需要公共嵌套类型 - 但它们有时会很有用。他们非常清楚地表明一种类型明确地与另一种类型相关联。

他们允许嵌套类型访问封闭类型的私有成员(在C#中),这可能有时很有用。例如,我会猜测 List<T>.Enumerator可以做到这一点。在Java中,访问规则以相反的方式工作 - 封闭类可以访问嵌套类的私有成员。

我认为必须解释为什么你要明确地禁止这个而不是为什么需要这样做。我想不出其他任何你可以指定访问修饰符但不能使其公开,除了不一致(例如,声明具有内部返回类型的公共方法)。< / p>

答案 1 :(得分:3)

通常不建议使用公共内部类型,请参阅此参考 http://msdn.microsoft.com/en-us/library/tdz1bea9(v=VS.71).aspx

...但由于存在(可能)例外情况,因此仍然允许

答案 2 :(得分:2)

考虑这个例子:

public class TrainingFile {

    public List<TrainingFileEntry> getEntries() {
           return ...
    }

    public class TrainingFileEntry {
        int x;
        int y;
   }
}

您想要隐藏TrainingFileEntry的详细信息,但您的客户需要能够使用它。你可以为这个嵌套类创建一个自己的文件,但是这样一个嵌套的帮助程序类通常不是“独立的”并且粘在它嵌套的类中。 - )

答案 3 :(得分:0)

当InnerClass的每个成员确实属于一个,并且只有一个外部类的成员时,它非常有用。我使用过那种OuterClass是数学对象集合的构造,而InnerClass本身就是实际的对象。