2016-08-08 14 views
1

私は個人的なプロジェクトに取り組んでおり、問題にぶつかってきました。仮想メソッドを持つ静的抽象オブジェクト

私は同じプロパティ、メソッドなどを持つオブジェクトをいくつか持っています。唯一異なるものは、名前、プロパティの値、メソッドの実装です。また、メソッドの共通のデフォルト実装が必要です。すぐに、インターフェイスは問題になりません。

私は、プロパティと "default"メソッドで基本クラスを作成しました。しかし、この基本クラスは抽象クラスである必要があります。これらのメソッドは仮想的なので、オーバーライドすることができます。

私はそれらを静的にする必要がある理由は、オブジェクトが他のオブジェクトのプロパティになるということです。

例えば、上で参照されたオブジェクトは(簡略化のため)objX、objY、objZです。それらはその基底から得られます、objW。

objContainerは完全に無関係のオブジェクトですが、objW、objY、objZのいずれかのインスタンスであるobjW型のプロパティを持っています。

objX、objY、objZはとなります。に変更されます。それらのプロパティはすべて読み取り専用です。したがって、インスタンスobjContainerの複数のオブジェクトには、objX、objY、またはobjZがあります。

public class objContainer1 
{ 
    objW processor = new objY; 
} 
public class objContainer2 
{ 
    objW processor = new objY; 
} 

どうすればよいですか?私はそれらを静的にして、同じオブジェクトの複数のインスタンスを持たないようにしました。

シングルトンを使用しますか?ファクトリーパターン?

これがあれば、どの方向に行くのか分かりません。たぶん私はそれを考えすぎているし、非常に簡単な解決策がある/

答えて

6

あなたは静的なクラスを控えめに使いたいと思う。静的クラスを継承することはできないため、クラス継承の多態性を利用できないなど、静的クラスに対しては明らかな欠点があります。静的なクラスを使用する唯一の時間は、実際には、アプリケーション全体で利用可能にしたい、関連するツールのセットなど、何も状態を維持する必要がない場合です。 System.Mathクラスを考えてみましょう。たとえば、アプリケーション内のどこでも使用できる一連の数学関数です。そのクラスのインスタンスを持つことは実際には意味をなさないので、むしろ面倒で不必要になります。

私は静的でないクラスに固執し、それらのクラスのインスタンスを作成することをお勧めします。クラスのインスタンスが1つだけ必要な場合は、提案したようにシングルトンを使用する必要があります。

+0

ありがとうございました。フォローアップの質問。すべてのオブジェクトが共通コードを持つシングルトンになる場合、個々のシングルトン自体はそのままで、すべてのシングルトンパターンを親から継承する方法はありますか?私は基本的には、派生クラスに各クラスのためにそれを繰り返すことなく実装されたシングルトンパターンを持ってほしい。 – ilyketurdles

関連する問題