2009-08-13 154 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(); 
     } 
    } 
} 
相關問題