2009-08-13 19 views
1

私は、アクセスするには複数の異なるクラスが必要なメソッドが1つしかありません。このメソッドを使用する必要があるクラスは、すでに抽象クラスを継承しているため、継承は使用できません。あなたはこの状況で何をしますか?複数のクラスで共有される1つのメソッド

+0

一つのことは、少人数のクラスを作っているのを恐れてはいけないように。時には、人々はクラスが "もの"の束を保持する必要があるという気持ちを得る。しかし、それはちょうど "構文"です。その有用な場合は、その中にただ一つのものを持つクラスを作る。それとも何もない!ルールはありません。 –

+0

1つの有用なメソッドでそれぞれN個のクラスを持ち、1つのクラスよりもわかりやすい名前を持ちます。 – sal

答えて

11

[I] tはちょうどそれを行うだけで、それが成長するただ一つの方法

ためのユーティリティ クラスを作るためにラメようです。それは常にそうです。 Common.Utilitiesやその性質の何かは、自明ではない解決策において常に必要です。

1

あなたは継承を使用できないということを意味しますか?

抽象クラスにメソッドを書き込む場合は、実装を記述することもできます(抽象クラ​​スのすべてが抽象クラスである必要はありません)。

しかし一般的に、ある種の 'GeneralUtils'クラスを持つことをお勧めします。あなたがこれらの機能のいくつかで終わるからです。

+0

私は、それらが既に別の基本クラスから継承しているので、これらのクラスが共有できるメソッドを使って、基本/抽象クラスを作成できないことを意味しました。 Ohh; – Allensb

+0

大丈夫です –

6

クラスは、小さくて集中しているマシンであることに注意してください。クラスが1つのメソッドしか持たない場合は、非常にの小さな集中マシンです。それには何も問題はなく、コードの集中化は貴重です。

+1

このサイトには「常設オベーション」オプションがありませんので、アップヴォートとコメントをお待ちしております。よく言った! –

0

私は明確な答えを与えるためにもっと多くの情報が必要です。 しかし、well-namedクラスの名前のついた1つのメソッドでは、可読性が不思議になる可能性があります(例えば、継承ベースのソリューションと比較して)

用語ユーティリティメソッドを使用しているので、静的メソッドを使用して実行します。

2

あなたのクラスは、「実装」しかし、そのインターフェイス上で拡張メソッドを作成することができるインターフェイスを作成し、あなたのクラスは、その後魔法を呼び出すことなく、そのメソッドを取得

:-)使用することができますカンニングがありますあなただけIDoThisThing

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

を追加することができ、彼らは:-)その事をゲットあなたのクラスの今のユーティリティクラス...

public Interface IDoThisThing {} 

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

これは実効的にユーティリティクラスを取り巻く論理的な砂糖ですが、クライアントコードをきれいに(クラスのメソッドとしてのみ表示されるように)作成します。

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(); 
     } 
    } 
} 
関連する問題