2012-05-09 7 views
1

noobやこの質問をどのように進んでいるのかよく分かりませんが、私は良い答えを見つけるのに苦労しています。データを持つクラスを継承する最も良い方法は?

私の質問を言葉で説明すると以下のようになります。私は、このプログラムのすべてのデータと情報のソースである起動時にInitが "エンジン"であるというプログラムを持っています。今、クラスを作成するときに新しいクラスを追加する必要があります。だけなので、親にこれを持っているクラスの関係私が知っている必要があり、これはそのと呼ばれるものです:私は「親子」を使用することができますどのようかしら何

public class ClassName(TMEngine engine) 
{ 
...... 
} 

です。 私は、FormUserControlの両方のクラスを作成して、いくつかのエクストラを持っているので、親クラスがあります。

public partial class msgCtrlContainerCtrl : TMUserControl 
{ 
    public msgCtrlContainerCtrl(TMEngine engine) 
    { 
     ...... 
    } 
} 

これはWinFormsアプリケーションであるため、フォームでエンジンを初期化しますが、そのエンジンで作成されたすべてのコントロールが同じエンジンを使用するようにします。 UserControlUserControlとして「追加」に初期化され、そしてLoadイベントが、この後ろにずっとさらに実行されるようにTMUserControlで「ロード・イベント」にエンジンを設定する

は、今動作しません。

新しいコントロールの「追加」を実行しても親リレーションがまだ初期化されていないため、コントロールの親を探すことはできません。

このエンジンを同期させてこのエンジンを最良の方法で同期させる方法は、UserControlクラスTMUserControlを呼び出すか、それを使用するすべてのクラスに入れる必要がありますか?

+4

あなたはそれの音からシングルトンを探している – Servy

+1

http://www.dofactory.com/Patterns/PatternSingleton.aspx –

答えて

1

このようなものをお探しですか?

public class TMEngine 
{ 
    private TMEngine() {} 

    private static TMEngine instance;  
    public static TMEngine Instance 
    { 
     get 
     { 
     if (instance == null)    
      instance = new TMEngine();    
     return instance; 
     } 
    } 

    public string GetSomeStringData() 
    { 
     ... 
    } 
} 

これはあなたのエンジンになります。あなたが進んであなたが望む方法を構築することができます。
エンジンを使用するすべてのクラスの要約が必要です。

public abstract class EnginedClass 
{ 
    public static TMEngine Engine { get { return TMEngine.Instance; } }; 
} 

それからちょうどそれを使用して、クラスを実装:

public MyNewClass : EnginedClass 
{ 
    ... 
    public string GetSomeData() 
    { 
     ... 
     return Engine.GetSomeStringData(); 
    } 
    ... 
} 
+0

これはちょうどそれかもしれません!インスタンスを持つ。それはショットを与えるだろう。ありがとう! –

+0

TMEngineを明示的にインスタンス化しない方法に注目してください。これはシングルトンなので、TMEngine.Instanceを使用するだけでインスタンス化します。 – BeemerGuy

関連する問題