组织扩展方法

时间:2008-09-18 20:41:27

标签: c# extension-methods code-organization

您如何组织扩展方法?假设我有对象类和字符串类的扩展我很想将这些扩展方法分成IE类:

public class ObjectExtensions
{
    ...
}

public class StringExtensions
{
    ...
}

我是不是太复杂了,或者这有意义吗?

2 个答案:

答案 0 :(得分:13)

我使用命名空间和类名的组合来组织扩展方法,它与您在问题中描述的方式类似。

通常我的解决方案中有一些“主要程序集”,它提供了大部分共享功能(如扩展方法)。为了讨论,我们将这个程序集称为“框架”。

在Framework程序集中,我尝试模仿我有扩展方法的东西的名称空间。例如,如果我正在扩展System.Web.HttpApplication,我将拥有一个“Framework.Web”命名空间。 “System”命名空间中的“String”和“Object”等类转换为该程序集中的根“Framework”命名空间。

最后,命名沿着您在问题中指定的行 - 类型名称以“Extensions”作为后缀。这产生了一个类层次结构,如下所示:

  • 框架(命名空间)
    • Framework.ObjectExtensions(class)
    • Framework.StringExtensions(class)
    • Framework.Web(名称空间)
      • Framework.Web.HttpApplicationExtensions(class)

好处是,从维护的角度来看,以后很容易找到给定类型的扩展方法。

答案 1 :(得分:3)

我组织使用的扩展方法有两种方法,

1)如果扩展特定于我正在处理的项目,那么我将它保存在同一个项目/程序集中,但是在它自己的命名空间中。

2)如果扩展是一种类型,以便我也可以或正在其他项目中使用它,那么我将它们分开在一个公共程序集中进行扩展。

最重要的是要记住,我将使用它们的范围是什么?如果我记住这一点,组织它们并不难。