C#中的继承+ NestedClasses

bay*_*der 9 c# inheritance nested-class

我们可以在C#中使用嵌套类.这些嵌套类也可以继承OuterClass.例如:

public class OuterClass
{
  // code here
  public class NestedClass : OuterClass
  {
    // code here
  }
}
Run Code Online (Sandbox Code Playgroud)

完全可以接受.

我们也可以在不将NestedClass作为OuterClass的嵌套类的情况下实现这一点,如下所示:

public class OuterClass
{
  // code here
}

public class NestedClass : OuterClass
{
  // code here
}
Run Code Online (Sandbox Code Playgroud)

我想知道,上面两个场景之间有什么区别?在方案I中可以实现什么,在方案II中无法实现?通过使NestedClass"嵌套"到OuterClasss,我们能得到更多的东西吗?

yas*_*891 15

您提供的第二个示例不是嵌套类,而是派生自的普通类OuterClass.

  • 嵌套类型默认为private可见性,但可以使用更广泛的可见性进行声明
  • 嵌套类型可以访问包含类型的属性,字段和方法(甚至是那些声明的private和从基类继承的那些)

还可以在这里看一下这个问题,了解何时以及为何使用嵌套类.
MSDN链接:嵌套类型(C#编程指南)

编辑
要解决@Henk关于两种关系性质差异的评论(继承与嵌套类型):在这两种情况下,你都有两种类之间的关系,但它们具有不同的性质.从派生类派生时,派生类继承基类的所有(除private)方法,属性和字段.嵌套类不适用.嵌套类不继承任何东西,但可以访问包含类中的所有内容 - 甚至是private字段,属性和方法.


Bol*_*ock 5

从父类继承不允许嵌套类看到其父类的私有成员和方法,只能查看受保护的(和公共的)成员和方法。将其嵌套在父类中可以让其查看所有私有成员并调用其私有方法,无论嵌套类是否从父类继承。