我正在处理一些我从其中一个示例派生的MonoTouch代码(这不是MonoTouch特定的问题),示例代码在另一个类中声明了一个私有类。我没有看到私人课程在c#中使用得太多,我不知道什么时候才有意义。我可以看到一个只在另一个类中被引用的类如何被声明为私有,但这不会导致更多的悲伤而不是它的价值吗?这不是打破了一些SOLID原则吗?
现在,由于私有类的定义,我发现因为尝试导航源而感到困惑。我想这可以通过声明一个部分类来包含私有类并将它们分成单独的文件来解决这个问题,但这真的是一个很好的方法吗?
答案 0 :(得分:3)
通常,嵌套类型(类或结构,包括枚举)用于某种上下文数据和/或行为,没有它的上下文就没有任何意义。
例如,您可以为某些互操作API创建嵌套类型,当您不希望从外部代码提供对该API的访问时,或者您正在使用某种辅助数据容器时,它提供的功能仅对周围的班级。
因此,即使制作这些类型internal
也会给其他开发人员带来困惑(特别是在几个人编辑单个项目的地方)。
我没有看到,SOLID在这里是如何被破坏的 - 嵌套类型只是类型范围的限制。它不是对周围阶级功能的扩展。
答案 1 :(得分:2)
我在API中说“你必须实现并在我们要求你时提供这个接口的实现”的情况下使用了私有类,并且除了使用之外没有该类的其他用途或消费者的API接口。
在这种情况下,接口提供公共或跨功能访问,因此无需访问实现。
答案 2 :(得分:1)
为什么SRP会被打破?您将只在类中访问的职责分离为嵌套类。
大多数其他原则不适用于私有成员或私有嵌套类。
答案 3 :(得分:1)
我不确定,但我认为Single Resposibilty可以被嵌套类破坏,因为类现在可以有更多的原因需要更改。 Single Resposibilty的定义不是很清楚...无论如何我认为ms也使用.net中的嵌套类,所以c#在封装方面可能缺少一些功能。我认为可以通过不执行嵌套类和编写分析器来修复嵌套类。嵌套类通常用于访问包装类的私有成员。