C#中的内部类

5

直到最近我才知道普通类和内部类/子类之间有区别。

内部类的实例和包含它的类的实例之间有什么关系?内部类的目的是什么,它们有何不同之处?

4个回答

15
与Java不同,C#中的类是嵌套的。包含类的实例与所包含类的实例之间没有关系。在C#中仅仅使用包含类来控制所包含类的可访问性,避免污染命名空间。(一些公司有一个编码规范,每个类必须放在它自己的文件中,对于小型类而言,嵌套类是绕过这个规定的一种方式。)
在Java中,内部类的实例(对象)具有指向外部类的指针。这是Java中常用小类处理事件等的一种方法。而在C#中,可以使用委托来实现。
(嵌套类曾是Java中的一种实验理念,每个人都喜欢,但其并不能真正经受住时间的考验。由于C#出现得晚,它能够从Java中学习那些行不通的东西。)

1
为什么内部类的this指针不能很好地工作?我目前在C#中正好缺少这个功能。委托并不能替代this。我必须添加一个手动字段来维护父类引用。 - Martin Kersten

6

.NET没有像Java一样的内部类,但它确实有嵌套类。

使用嵌套类的原因是控制类的可访问性。


4

C#中,常规类和内部类之间至少存在三个不同之处,内部类还可以形成内外类之间的关系。

  • 内部类可以声明为protected、internal、protected internal或private,而普通类则不能。
  • 内部类可以访问包含它的外部类的静态成员,而无需使用该类的名称。
  • 当内部类访问外部类的实例时,即使这些成员不是静态的,它也可以访问该对象的私有成员。

1

C# - 包含的类是嵌套的。包含类的实例和包含的类的实例之间没有关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接