我们啥时候在 C# 中使用嵌套类 [重复]

Posted

技术标签:

【中文标题】我们啥时候在 C# 中使用嵌套类 [重复]【英文标题】:When do we use a nested class in C# [duplicate]我们什么时候在 C# 中使用嵌套类 [重复] 【发布时间】:2011-03-23 09:09:53 【问题描述】:

想知道什么时候在 C# 中使用嵌套类是正确的吗? 我们是否有过使用它不正当而因此不正确的事件?

如果你能给出这两种情况的例子 谢谢

【问题讨论】:

你有嵌套类的例子吗?链接? 【参考方案1】:

我发现当您需要封装主要将在父类中使用的数据格式时,使用嵌套类很方便。这通常是因为数据的用途或格式是为父类定制的,因此它并不适合在您的解决方案中更广泛地使用。

【讨论】:

【参考方案2】:

这里是嵌套类的简单基本介绍。

Nested_Classes

【讨论】:

【参考方案3】:

C# 没有办法编写using 指令来定位一个类,因此可以访问该类的静态成员,而无需将类名写为限定符(与 Java 的 import static 相比,它确实允许)。

因此,对于您的类的用户来说,如果您将任何公共类作为命名空间的直接成员,而不是嵌套在其他公共类中,会更方便一些。这样他们就可以使用using 指令将它们拉入全局命名空间。

对于私有类,请发疯,最好将它们放在靠近它们用于增强代码可读性的位置。

【讨论】:

【参考方案4】:

我不确定我的世界中是否还有嵌套类的空间。它只是模糊了我的设计。如果您需要在类中隐藏信息,为什么不将其存储在成员变量中呢?

此外,如果无法在类的位置注入存根,测试会变得更加繁琐。

【讨论】:

因为它并不总是您需要封装的数据,否则结构就足够了。如果你有一个汽车类,嵌套类是引擎,引擎需要有“Start()”等函数。 @Brian,但是您为什么不将 Engine 视为普通的独立类(它也恰好是 Car 的属性)?我可能只是很愚蠢,但我从来没有经历过对嵌套类的需求。我通常使用 Engine 作为属性或让 Car 实现 IEngine 接口。我知道可能存在信息隐藏必不可少的情况,但我没有亲身经历过这些情况:-) 当然,内部引擎的情况实际上取决于应用程序的范围/上下文,嵌套类的任何实现都可以说是个人喜好。【参考方案5】:

嵌套类的用户取决于下面的场景。

1) 将代码组织到两个对象之间存在特殊关系的现实世界中。 2) 将一个类隐藏在另一个类中,这样您就不想在创建它的类之外使用内部类。

假设您有 2 个名为 A 和 B 的类,而 B 类依赖于没有 A 类的 A 类,您不能使用 B 类@在这种情况下您可以使用嵌套类

据我所知

DataRow 类是 DataTable 的嵌套类 即你不能创建一个 DataRow 类,直到你声明一个 DataTable 类的对象

【讨论】:

【参考方案6】:

我发现两个主要原因:

    个性化类名而不破坏它。 示例:Vercas.ExplorerView,我在不破坏含义的情况下个性化了我的班级名称。

    私人课程。 示例:Vercas.ExplorerView.Item 仅在 Vercas.ExplorerView 内部使用。

【讨论】:

以上是关于我们啥时候在 C# 中使用嵌套类 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从嵌套类到包含类的 C# 成员访问 [重复]

C#中的嵌套类

在模板化类[重复]中使用嵌套嵌套类时,“依赖名称不是类型”

基于元组或嵌套字典有啥好处吗?

《C#零基础入门之百识百例》(五十)嵌套类和嵌套方法 -- 汉诺塔游戏

c# 在类嵌套结构中引用非静态类成员