2009-08-13 104 views
1

我只有一种方法,我需要几个不同的类来访问,它只是一个工具类只有一个方法似乎跛脚。需要使用这个方法的类已经继承了一个抽象类,所以我不能使用继承。你们在这种情况下会做什么?几个类共享的一种方法

+0

一件事,不要害怕正在小班的。有时候人们会觉得一个班上应该有一堆“东西”。但它只是“语法”。如果它很有用,那就只用一件东西做一堂课。甚至什么也没有!没有规则:) – 2009-08-13 06:07:46

+0

最好有N个类,每个类有1个有用的方法,而描述性的名称比1个类有N个不相关的方法与神秘的名字。 – sal 2009-08-13 14:52:09

回答

11

[I] T,似乎只是跛脚制作工具 类只有一个方法

只要做到这一点,它会越来越大。它总是这样。在任何非平凡的解决方案中,常见的功能或性质都是必需的。

1

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

如果您在抽象类中编写方法,还可以编写实现(并非抽象类中的所有内容都必须是抽象的)。

但一般来说,建议拥有某种'GeneralUtils'类;导致你最终得到一些这些功能。

+0

我的意思是我不能用这些类可以共享的方法创建基类/抽象类,因为它们已经从不同的基类继承。 – Allensb 2009-08-13 04:44:31

+0

哦;好吧,有道理。 – 2009-08-13 04:45:22

6

请记住,一个班只是一个小型,专注的机器。如果该类只有一种方法,那么它只是一个小而专注的机器。它没有什么错,集中代码很有价值。

+1

本网站不具有“起立鼓掌”的选项,所以我希望你会满足于在给予好评和令人鼓舞的评论。说得好! – 2009-08-13 05:08:50

0

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

因为您使用术语实用程序方法,所以我会说创建一个静态类用静态方法完成。

2

还有就是你可以用:-)

作弊创建你的类可以“落实”,但是,创建一个接口上的扩展方法的接口,你的类,然后奇迹般地获得该方法无需调用实用类...

public Interface IDoThisThing {} 

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

现在在你的类,你可以只添加IDoThisThing

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

,他们把那东西:-)

注意,这只是有效实用程序类中的syntally糖,但它确实使客户端代码非常干净(就像在您的类中出现的方法一样)。

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(); 
     } 
    } 
} 
相关问题