C#的部分类是糟糕的设计吗?[已关闭]
C#的部分类是糟糕的设计吗?[已关闭]
已关闭 。这个问题是基于 观点 的。目前不接受回答。
想要改善这个问题吗? 更新问题,使其可以通过事实和引用来回答,通过编辑此帖子。
改善这个问题
我想知道在C#/VB.NET中为什么存在“部分类”概念。我正在开发一个应用程序,我们正在阅读一本与我们在工作中实现的开发平台相关的(其实非常好的)书籍。在书中,作者提供了一个围绕该平台API的大型代码库/包装器,并解释了他是如何在教授有关平台开发的不同主题时开发它的。
总之,简而言之-他使用部分类,到处都是,作为在C#中伪造多重继承的一种方式(在我看来)。为什么他不将类分成多个,并使用组合,超出了我的理解范围。他将有3个“部分类”文件来组成他的基类,每个文件都有3-500行的代码...并在他的API中多次这样做。
你认为这样做有道理吗? 如果是我,我会按照 S.R.P. 的规定创建多个类以处理不同的必需行为,然后创建一个基础类,将这些类的实例作为成员(例如组合)。为什么微软甚至将 Partial class 放入框架中呢?他们在 C#中删除了扩展/折叠每个作用域级别的所有代码的能力(在 C ++ 中允许此操作),因为这显然只是允许了不良习惯 - 在我看来,Partial class 也是这样。 我想问的是:您能向我解释何时会有合法的原因使用 Partial class 吗?
编辑:我知道对于 Web/WinForms 来说没有其他选择。但是在这之外呢?为什么微软不使用其他不同的关键字来将代码生成的类相互粘合?或者真的有一个合法的设计方案值得使用吗?
我并不是在写怒气冲冲的帖子/战争帖子,我真的想在这里学习一些东西。什么时候应该在代码设计中使用 Partial class?简单的问题,没有必要关闭
感谢
我使用 partial class(部分类)的两个原因:
- 分离自动生成的代码部分(例如 WinForms 的设计器代码或 T4 输出)。
- 允许嵌套类型拥有自己的文件,同时仍满足设计所需的封装。
更新
我可以看到,有些人对我的第二个观点并不信服,那么让我举个例子:框架中的 ListViewItemCollection。它正确地嵌套在 ListView 下面,因为它只用于 ListView,但为了更轻松地维护,我会使用 partial class 为它单独创建文件。我不认为这是糟糕的设计或对 partial 关键字的误用。
如需更多讨论,请查看此问题的重复问题:C# 中的 Partial Classes
你能解释一下什么时候才有合法的理由使用partial class吗?
最合法和有用的理由之一是鼓励自动生成的代码与您自己的定制扩展分离。例如,通常会从某种设计器生成自动表单代码,但您通常希望添加自己的特定行为。这样,如果重新生成自动代码部分,您就不会触及具有特定扩展的部分。
话虽如此,过犹不及。一些提示:
-
不要仅仅为了体现而使您的类“partial”。
-
除非并排使用,否则不要将partial类放在任何地方。如果您必须跳转到项目的完全无关部分才能查看类的另一半,则您可能做错了。
-
不要使用
partial
来遮盖类的大小。如果您正在使用partial
来分解类,因为它们太大了,那么您应该重新查看单一责任原则。 -
如果对于同一类存在三个或更多
partial
片段,则可以几乎保证您正在滥用partial。两个是合理性的典型上限,通常用于从手写代码中分割自动生成的代码。
无论如何,长话短说 - 他到处都使用partial class,作为在C#中模拟多重继承的方法(在我看来)。为什么他不仅将类拆分成多个类并使用组合也令我无法理解。他将拥有3个“partial class”文件来组成他的基类,每个文件可能有3-500行代码... 并且在他的API中这样做了好几次。
是的,这绝对是对
partial
的滥用!