0

我正在处理一些从其中一个示例派生的 MonoTouch 代码(这不是 MonoTouch 特定的问题),并且示例代码在另一个类中声明了一个私有类。我还没有看到在 c# 中大量使用私有类,我不知道它什么时候才有意义。我可以看到一个只在另一个类中引用的类是如何被声明为私有的,但这不会导致比它的价值更多的悲痛吗?这不会破坏一些 SOLID 原则吗?

  • 单一责任 - 坏了?
  • 打开/关闭 - 坏了?
  • Liskoff 换人 - 也许可以?
  • 接口隔离 - 坏了?
  • 依赖倒置 - 坏了?

现在,由于私有类定义,我发现仅仅试图导航源代码就令人困惑。我想这可以通过声明一个包含私有类的部分类并将它们分成单独的文件来缓解,但这真的是一个好方法吗?

4

4 回答 4

3

通常,嵌套类型(类或结构,包括枚举)用于某种上下文数据和/或行为,没有上下文就没有任何意义。

例如,当您不想从外部代码提供对该 API 的访问时,您可以为某些互操作 API 创建嵌套类型,或者您正在使用某种帮助数据容器,它提供了仅对周围类有用的功能。

因此,即使制作这些类型internal也会给其他开发人员带来混乱(尤其是在由几个人编辑单个项目的情况下)。

我没有看到,这里的 SOLID 是如何被破坏的——嵌套类型只是类型范围的限制。它不是周围类功能的扩展。

于 2012-09-19T05:21:05.723 回答
2

在 API 说“当我们要求您提供此接口的实现并向我们提供该接口的实现”的情况下,我使用了私有类,并且除了使用 API 之外,该类没有其他用途或消费者界面。

在这种情况下,接口提供公共或跨功能访问,因此无需访问实现。

于 2012-09-19T05:19:50.637 回答
1

为什么 SRP 会被破坏?您将只能在类内部访问的职责分离到嵌套类中。

大多数其他原则不适用于私有成员或私有嵌套类。

于 2012-09-19T05:16:13.173 回答
1

我不确定,但我认为 Single Resposibilty 可以被嵌套类打破,因为一个类现在可以有更多的理由来改变。Single Resposibilty 的定义不是很清楚......无论如何,我认为 ms 确实在 .net 中也使用了嵌套类,所以也许 c# 在封装方面缺少一些特性。我认为嵌套类可以通过不做嵌套类和编写分析器来修复。嵌套类通常用于访问包装类的私有成员。

于 2017-05-26T23:06:20.477 回答