2009-09-18 76 views
13

我在问这个,因为我发现分发类定义是一个相当危险的特性,所以如果你知道它的全部内容,你无法真正确定。即使我找到三个部分定义,我怎么知道这里没有第四个地方?C# - “部分”类有什么好处?

我是新的C#,但已经花了10年,C++,也许这就是为什么我动摇了?

无论如何,“部分”的概念必须有一些很大的好处,我明显缺少。我很想了解更多关于它背后的哲学。

编辑:对不起,错过this duplicate当搜索现有的职位。

+0

“我怎么知道没有第四个地方?” 这里的问题不是部分类,而是缺乏对正在编译的项目的了解。 – mackenir 2009-09-18 09:57:15

+0

http://stackoverflow.com/questions/612831/practical-usage-of-partial-keyword-in-c – 2009-09-18 10:15:16

+0

@mackenir:尝试将该参数与分配给100000多行代码项目的维护开发人员进行比较。 – sharkin 2009-09-18 13:53:38

回答

31

部分类在使用代码生成时非常方便。如果你想修改一个生成的类(而不是从它继承),那么当代码重新生成时,你可能会冒失去更改的风险。如果你能够在一个单独的文件中定义你的额外方法等,这个类的生成的部分可以重新创建,而不需要加上手工制作的代码。

+2

+ 1 - 事实上,Visual Studio附带的表单构建器工具使用了这一特性。 – ConcernedOfTunbridgeWells 2009-09-18 10:02:11

11

最大的好处是隐藏计算机生成的代码(由设计者)。
Eric Lippert最近有一篇关于partial-keyword的博客文章。

另一个用法是给嵌套类自己的文件。

3

两个人编辑同一个班级,并自动生成的设计器代码是两个直接的功能,我可以看到,被部分的类和方法解决。

有设计师在一个单独的文件中生成的代码是很多更容易比1.1,在那里你的代码可以通常可以通过Visual Studio的错位(在Windows窗体)一起工作。

Visual Studio仍然使设计器文件,代码背后和设计文件与ASP.NET同步混乱。

+0

编辑同一类的两个人应该使用版本控制,而不是部分类。 – svinto 2009-09-18 10:04:22

+0

或者两者兼而有之,如果它是一些拥有1000行代码的巨大遗留类,则可以节省合并头痛。 – 2009-09-18 10:14:17

+0

我并不是建议这是正确的工作方式,但这是部分类背后的想法之一:http://msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx – 2009-09-18 10:20:12

3

的另一点是,当一个类实现多个接口,你可以指出错误文件分割的接口实现。

所以每个代码文件只有属于接口实现的代码。它根据分离关注的概念。

2

如果你有某种荒谬的大班,由于某种原因不能或不允许在逻辑上分裂成更小的类,那么你可以将它们至少在物理分解成多个文件,以便更有效地与它的工作的。本质上,您可以一次查看小块,避免上下滚动。

这可能适用于可能是由于一些神秘的政策是不允许乱用,因为纷繁根深蒂固的依赖现有的API遗留代码。

不一定是最好的使用部分类的,但肯定给你一个备用选项组织代码,您可能无法以其他方式修改。

1

也许为时已晚,但请让我补充我的2美分太:

*。当工作在大型项目中,在不同的文件中传播的一类允许多个程序员同时在它的工作。

*。您可以轻松地为VS.NET生成的类编写代码(用于扩展功能)。这将允许您编写自己需要的代码,而不会混淆系统生成的代码