C# - “partial”类有哪些好处?

13
我询问这个问题是因为我发现将类定义分发是一项相当危险的功能,以至于您无法确定是否已经完全了解它。即使我找到了三个部分定义,我怎么知道没有第四个呢?
我对C#还很陌生,但已经用C++玩了10年,也许这就是我感到不安的原因?
无论如何,“partial”概念肯定有一些巨大的好处,而我显然正在错过。我很想学习更多关于它背后哲学的知识。
编辑:抱歉,在搜索现有帖子时错过了此重复

“我怎么知道有没有第四个存在?”这里的问题不在于部分类,而在于您编译的项目缺乏了解。 - mackenir
https://dev59.com/oUbRa4cB1Zd3GeqP3cW8 - Chris S
@mackenir:试着向分配到一份超过100000行代码项目的维护开发人员提出这个论点。 - sharkin
2
Visual Studio 中的“转到定义”功能将为您提供一个列表,其中包含声明局部类型的四个位置。 - Eric Lippert
6个回答

31

部分类在使用代码生成时非常方便。如果您想要修改一个生成的类(而不是继承它),那么当代码重新生成时就有可能会丢失您的更改。如果您能够在单独的文件中定义额外的方法等,那么类的生成部分就可以在不破坏手工编写的代码的情况下重建。


2
+1 - 实际上,这个功能被 Visual Studio 自带的表单构建工具所使用。 - ConcernedOfTunbridgeWells

11
伟大的好处在于隐藏计算机生成的代码(由设计者完成)。 Eric Lippert最近在博客中讨论了partial-keyword的一般情况。 另一个用途可能是给嵌套类单独的文件。

3

我能看到通过局部类和方法解决了两个问题:两个人编辑同一个类和自动生成的设计师代码。

将设计师生成的代码放在单独的文件中比1.1版本要容易得多,因为在1.1版本中,你的代码经常会被Visual Studio(在Windows窗体中)搞乱。

尽管如此,Visual Studio仍然无法很好地同步ASP.NET的设计文件、代码后台和设计文件。


两个人同时编辑同一个类应该使用版本控制,而不是使用部分类。 - Svante Svenson
或者两者都可以,如果它是一个有数千行的遗留类,那么这样做可以避免合并时出现的麻烦。 - Chris S
我并不是在建议这是正确的工作方式,但这是部分类的背后之一的想法:http://msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx - Chris S

3
另一个要点是,当一个类实现多个接口时,您可以将接口实现分割到不同的文件中。因此,每个代码文件仅包含与接口实现相关的代码。这符合“关注点分离”的概念。

2
如果你有一些特别庞大的类,由于某种原因不能或不允许逻辑上分解成小类,那么你至少可以将它们物理上分成多个文件,以便更有效地处理。基本上,你可以每次查看小块代码,避免来回滚动浏览。
这可能适用于旧代码,由于某些古老的策略,不允许干扰现有API,因为存在众多和根深蒂固的依赖关系。
这并不一定是使用部分类的最佳方式,但肯定为你提供了一个替代选项,以组织可能无法修改的代码。

1
也许已经有点晚了,但请允许我也加入我的两分钱:
* 在处理大型项目时,将一个类分散到不同的文件中可以让多个程序员同时工作。
* 您可以轻松地为 VS.NET 生成的类编写代码(以实现扩展功能)。这将使您能够编写自己所需的代码,而不会干扰系统生成的代码。

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