74

我通常遵循全局变量/函数是邪恶的规则并且每段代码都应该存在于它所属的类中。

这是一条非常容易遵循的规则,我相信直到现在我还没有遇到过这条规则的问题。

然而,今天,我需要将一个函数添加到我的程序集中,而不是添加到特定的类。也就是说,几乎我所有的课程都可以使用这个特定的功能。

我应该把这个功能放在哪里(+1重载)?

如果我把它放在“实用程序”类中,我会觉得很脏。如果我把它附加到一个半相关的类上,让其他类直接调用它,我感觉更糟。

这段特定的代码基本上将 aIList<PointF>切成规范化列表。我现在觉得将它作为扩展方法添加IList<PointF>可能是最好的选择......

4

3 回答 3

35

如果这是对 an 的操作IList<PointF>,那么它应该是对 的扩展方法IList<PointF>

一般来说,Utils应该Helper避免使用类型类。通常,您会发现您可能认为是实用方法,实际上是一种相当具体的方法,可能属于它自己的一个类(就像您说的那样)。但是,在某些特定领域的情况下,Util类类(将相关有用方法分组的类)是有效实体。

于 2010-07-27T00:30:06.357 回答
13

“全局”变量和方法没有错。你一直在使用它们。框架喜欢称它们为“静态”类或“静态”方法。

我很少需要,但我通常在命名空间中添加一个内部静态类 Util,C# 需要该方法/变量,VB.NET 需要一个模块。

来自 .NET Framework 的示例

  • System.Collections.Specialized.CollectionsUtil
  • System.Net.WebUtility
  • 检查 Microsoft 的 .NET Framework 源代码。您会发现许多内部实用程序类。
于 2010-07-27T00:41:20.697 回答
4

当然,您应该将其放入“ListUtilities”或PointListUtilities类中。那么你就没有打破单一责任原则,这是一个包罗万象的“实用程序”类的主要问题。

于 2010-07-27T00:29:35.383 回答