1

この質問がどれほど初心者か高度かはわかりませんが、良い答えを見つけるのに少し苦労しているので、ここで試してみようと思いました。

私の質問を言葉で説明すると、次のようになります。Initが起動時に「エンジン」であり、このプログラムのすべてのデータと情報のソースであるプログラムがあります。今、新しいクラスを作成する場合は、クラスの作成時にそれを含める必要があります。

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

私が疑問に思うのは、「子:親」クラスの関係を使用してこれを親に含めることができるかどうかです。したがって、私が知る必要があるのは、それが何と呼ばれるかだけです。Form私はとの両方のクラスを作成しUserControl、それらにいくつかの追加機能を含めるため、親クラスがあります。

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

これはWinFormsアプリケーションであるため、フォームでエンジンを初期化しますが、そこで作成されたすべてのコントロールで同じエンジンを使用したいと思います。

の「Load-event」でのエンジンの設定は、「add」で初期化されるTMUserControlため、現在は機能しません。イベントは、この背後でさらに実行されます。UserControlUserControlLoad

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

UserControlそれで、私がここで呼ぶ拡張クラスでこのエンジンを同期させるための最良の方法でこれを解決する方法、TMUserControlまたはそれを使用するすべてのクラスになければならないアイデアはありますか?

4

1 に答える 1

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();
    }
    ...
}
于 2012-05-09T19:20:00.000 に答える