2010-08-11 68 views

回答

6

从本质上讲,部分方法最有用的目的是让代码生成系统提供一个API来扩展其属性和方法的功能而不使用继承。

查看任何Linq to SQL数据模型的快速示例。

生成的代码包含部分方法,如果在您自己的部分类中实现,则允许在现有属性中执行验证逻辑,事件通知等。

使部分方法更具吸引力的是,如果您没有在自己的部分类中实现它们,则它们不会被发射到编译代码中,从而提供适度的效率提升。

这里有一个体面的博客条目,演示如何使用的部分方法注入验证逻辑:

http://www.davidhayden.com/blog/dave/archive/2007/07/24/LINQToSQLValidationEnterpriseLibraryValidationApplicationBlock.aspx

2

据我了解,主要好处之一是有能力的代码生成“存根“,您可以选择是否执行。所以你的代码创建一个部分方法并调用一些验证方法。为了“插入”你的验证,你只需实现部分方法。 “部分”关键字允许相对干净的开发过程。

10

Partial Class and Methods (C# Programming Guide)上MSDN:

的局部类或结构可以包含一个局部方法。该类的一部分包含该方法的签名。可选的实现可以在相同的部分或另一部分中定义。 如果未提供实现,则在编译时删除方法和对该方法的所有调用。

部分方法使类的一部分的实现者能够定义类似于事件的方法。 类的其他部分的实现者可以决定是否实现该方法。如果该方法未实现,则编译器将删除方法签名以及对该方法的所有调用。对该方法的调用(包括在调用中对参数进行评估时发生的任何结果)在运行时不起作用。因此,即使未提供实现,部分类中的任何代码都可以自由使用部分方法。如果调用方法但未实现,则不会导致编译时或运行时错误。

部分方法作为自定义生成代码的一种方式特别有用。它们允许保留方法名称和签名,以便生成的代码可以调用该方法,但开发人员可以决定是否实施该方法。就像部分类一样,部分方法可以使由代码生成器创建的代码和由人类开发人员创建的代码一起工作,而无需运行时成本。

在我看来,我会建议避免使用这些,除非你对他们有特殊的需求。

+0

+1没有意识到未实现的部分方法被编译器删除。 – 2010-08-11 23:37:47

3

生成的代码。简单而简单,这是他们实施的头号原因。看看像WPF的东西。 UI在XAML中以声明方式完成,“代码隐藏”在C#中。通过使用部分类概念,两个部分是相同的类拆分

+0

问题涉及部分*方法*,但这个答案解决部分*类*。虽然在[同一文章](https://msdn.microsoft.com/en-us/library/wa80x488.aspx)中的MSDN上记录,但它们并不相同。 – DavidRR 2016-04-06 14:54:17