请说明部分方法解决的问题

时间:2010-08-11 23:08:21

标签: c#

我仍然没有真正获得部分方法的优势。任何人都可以说明部分方法非常适合解决的问题吗?

4 个答案:

答案 0 :(得分:10)

来自MSDN上的Partial Class and Methods (C# Programming Guide)

  

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

     

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

     

部分方法作为一种自定义生成代码的方法特别有用。它们允许保留方法名称和签名,以便生成的代码可以调用方法但开发人员可以决定是否实施方法。与部分类非常相似,部分方法使代码生成器创建的代码和人类开发人员创建的代码能够在没有运行时成本的情况下协同工作。

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

答案 1 :(得分:6)

基本上,部分方法最有用的目的是让代码生成系统提供API,以便在不使用继承的情况下扩展其属性和方法的功能。

快速了解一下Linq to SQL数据模型。

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

使部分方法具有吸引力的原因在于,如果您不在自己的分部类中实现它们,它们根本不会被发送到编译代码中,从而提供适度的效率提升。

这是一篇不错的博客文章,演示了如何使用部分方法来注入验证逻辑:

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

答案 2 :(得分:3)

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

,两个部分都是相同的类

答案 3 :(得分:2)

据我了解,其中一个主要好处是能够拥有代码生成的“存根”,您可以选择是否实现。所以你的代码生成了一个局部方法并调用了一些Validate方法。为了“插入”您的验证,您只需实现部分方法。 “partial”关键字允许相对清晰的开发过程。