如果"Utilities"类是邪恶的,我在哪里放置我的通用代码?

Joh*_*zen 64 c# oop global-variables utility-method

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

这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题.

然而,今天,我需要的功能添加到我的组装,而不是一个特定的类.也就是说,我的几乎所有类都可以用于这个特定的功能.

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

如果我把它放在"公用事业"课程中,我会觉得很脏.如果我将它添加到一个半相关的类,并让其他类直接调用它,我会感觉更糟.

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

Håv*_*d S 29

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

一般情况下,UtilsHelper应避免类型类.通常情况下,你会发现你可能认为是一种实用方法,实际上是一种非常具体的方法,可能属于它自己的一个类(就像你说的那样).但是,将存在特定于域的情况,其中Util类似的类(将相关有用方法分组的类)是有效实体.

  • 我可能在这里错了,但是如果`Utilities.Segment(points,50)`很好,那么`points.Segment(50)`有什么问题? (5认同)
  • 扩展方法和静态实用方法实际上是一回事。**only** 区别在于方法调用语法,其中扩展方法的第一个参数放在 `.` 运算符之前。您使用扩展方法和静态实用程序方法来设计软件的方式完全相同。我觉得令人困惑的是,这个答案似乎暗示存在差异。 (4认同)
  • +1扩展方法非常适合此类问题 (3认同)

AMi*_*ico 12

"全局"变量和方法没有错.你总是使用它们.该框架喜欢称它们为"静态"类或"静态"方法.

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

来自.NET Framework的示例

  • System.Collections.Specialized.CollectionsUtil
  • System.Net.WebUtility
  • 查看Microsoft的.NET Framework源代码.您会发现许多内部实用程序类.

  • 请注意,BCL中的所有示例都围绕特定职责分组.任何地方都没有通用的"Utils"类. (2认同)