1

私は2つのクラスを持っています

クラス1。

public class BaseContentPage : System.Web.UI.Page
{

}

クラス 2。

public class BaseUserControl : System.Web.UI.UserControl
{


}

そして今、私は彼らにこのクラスを知ってもらいたい.

public class BaseCommon 
{
  public string Variable1 { get; set; }
  public string Variable2 { get; set; }
  public string Variable3 { get; set; }
}

私が現在行っている方法は、 BaseCommon クラスの変数をそのように静的にすることです

public static string Variable1 { get; set; }
public static string Variable2 { get; set; }
public static string Variable3 { get; set; }

他にどうすればこれを行うことができますか?

4

3 に答える 3

5

コンポジションを使用します。

BaseContentPage と BaseUserControl に BaseCommon タイプのプライベート フィールド (必要に応じてプロパティとして公開できます) を指定します (静的にしないでください)。

BaseCommon を作成するか、コンストラクターを介してインスタンスを渡すことができます (依存性注入)。

于 2009-10-14T01:31:40.700 に答える
1

まず、BaseCommon プロパティを静的にしたくないと思います。プロパティはアプリケーション全体でグローバルであるため、1 つのインスタンスからプロパティを変更すると、すべてのインスタンスでプロパティが変更されます。

あなたが話しているのは多重継承であり、C# ではサポートされていません。BaseCommon をインターフェイスに変更し、BaseContentPage と BaseUserControl でそのインターフェイスを実装する方がよいでしょう。

于 2009-10-14T01:30:58.907 に答える
0

それらが静的である場合、それはこの 3 番目のクラスがグローバル リソースであることを意味しますか? Singleton または IoC コンテナを調べるか、構築時にインスタンスを他のクラスに渡すことができます。

オブジェクト継承ツリーの 2 つの異なる部分に追加する共通の「基本」データが何であるかについて、より具体的な例を示す必要があります。

おそらく、各インスタンスが実際に似たようなデータを持っているとします(私が考えている例は国際化です。これは、コンテキストで固有のフレーズ ID などに従ってページとユーザーコントロールの両方をカスタマイズするために使用されます)。できることは、II18nSettings を実装するクラス I18nSettings を持つことです。次に、各クラスで I18nSettings インスタンスをカプセル化し、II18nSettings を実装して渡します。または、内部の I18nSettings インスタンスを公開できます。インターフェースを定義して、各クラスにそれを実装させたところです。個別のクラスを作成する価値はまったくありませんでした。

この種のことを行うための他のオプションがあります - それは、継承している具体的なクラスが、追加しているものよりもはるかに有用なものを実装しているかどうかによって異なります。具象クラスから継承し、他のインターフェイスを実装して、クラスを他の場所で使用できるようにする方が理にかなっている場合があります。

于 2009-10-14T01:29:19.893 に答える