几个类共享的一种方法

时间:2009-08-13 04:35:37

标签: c# .net architecture

我只有一个方法,我需要几个不同的类来访问,只为一个方法创建一个实用程序类似乎很蹩脚。需要使用此方法的类已经继承了一个抽象类,因此我无法使用继承。在这种情况下你们会做什么?

6 个答案:

答案 0 :(得分:11)

  

[我]做一个实用工具似乎很蹩脚   只有一种方法的课程

做到这一点,它会成长。它总是这样。 Common.Utilities或这种性质的东西在任何非平凡的解决方案中总是必要的。

答案 1 :(得分:6)

请记住,课程只是一个小型,专注的机器。如果该类只有一个方法,那么它只是一个非常小型,专注的机器。它没有任何问题,集中代码很有价值。

答案 2 :(得分:2)

你可以使用作弊: - )

创建一个类可以“实现”的接口,但是,在该接口上创建一个扩展方法,然后你的类神奇地获得该方法,而不必调用实用程序类...

public Interface IDoThisThing {}

public static void DoThisThingImpl(this IDoThisThing dtt)
{
  //The Impl of Do this thing....
}

现在,您可以在课程中添加IDoThisThing

public class MyClass, MyBaseClass, IDoThisThing
{
  //...
}

他们得到那个东西: - )

请注意,这只是一个有效的实用程序类的合成糖,但它确实使客户端代码非常干净(就像你的类中的方法一样)。

答案 3 :(得分:1)

你是什么意思,你不能使用继承?

如果你在抽象类中编写方法,你也可以编写实现(并不是抽象类中的所有东西都需要抽象)。

但一般来说,建议使用某种'GeneralUtils'类;因为你最终得到了一些这样的功能。

答案 4 :(得分:0)

我需要更多信息才能给出明确的答案。 然而,一个命名良好的类具有一个命名良好的方法可以创建可读性的奇迹(例如,与基于继承的解决方案相比)

由于您使用术语实用程序方法,我会说使用静态方法创建一个静态类并完成它。

答案 5 :(得分:0)

可以使用扩展方法......

namespace ExtendMe
{
    public interface IDecorate { }

    public static class Extensions
    {
        public static void CommonMethod(this IDecorate o) { /* do stuff */ }
    }

    public class Blah :IDecorate {}

    public class Widget : IDecorate {}

    class Program
    {
        static void Main(string[] args)
        {
            new Blah().CommonMethod();
            new Widget().CommonMethod();
        }
    }
}