1

C#には多重継承がないこと、それも必要ないこと、そしてそれがあまりにも多くの問題を引き起こすことを説明する質問/回答を読みました。

現在、私は、コードを複製せずに、多重継承なしで物事を行う方法を本当に理解していないプロジェクトに取り組んでいます。

これが状況です。ホームページとマスターページから継承する他のページがあるWebサイトがあります(ホームページは継承しません)。ページとマスターページの両方が、カスタムログイン、統計、カスタマイズのためのユーザー設定の読み込みなど、いくつかのことを実行しています。これらのタスクのソースコードは2回コピーされるだけなので、現時点では解決策はお粗末です。

ホームページクラスはから継承しPageます。一方、マスターページはから継承しMasterpageます。論理的には、共通クラスから継承するのもいいのですが、多重継承なので不可能です。

では、代わりに何をすべきでしょうか?

私はいくつかの方法を考えましたが、それらを嫌います:

  • ページ/マスターページクラスから呼び出されるスタンドアロンクラスを作成します。したがって、たとえば、を書く代わりにbool isDisplayingTips = this.CurrentUser.IsDisplayingTips、を書きbool isDisplayingTips = this.SharedObjects.CurrentUser.IsDisplayingTipsます。書くのが長いので、私はそれが好きではありません。

  • 「実際の」空の共通マスターページを作成し、ホームページとマスターページの両方をそこから継承します。マスターページパラメータにアクセスするためにより多くのコードを記述する必要があるだけでなく、処理が遅くなり、リクエストごとに追加のマスターページが必要になります。

何か案が?

4

4 に答える 4

8

MasterPage は単なるコントロール (実際のページに埋め込まれます) であるため、後でアプローチすることはできません。ただし、別のヘルパー クラスを作成する最初のアプローチは非常に実現可能です。

私たちが通常使用するさらに別のアプローチは、

  1. 共通ベース ページ クラス - すべてのページが共通ベース ページから継承されます。
  2. 共通の機能を基本ページ クラスに配置する
  3. マスター ページから、キャストによってベース ページを参照できます (例: myBasePage = (BasePage)this.Page;. このようにして、マスター ページは基本ページ クラスから共通の機能にアクセスできます。
于 2010-09-13T11:34:22.530 に答える
1

最初のオプションを使用することをお勧めします。(当然のことながら) 間接化のレベルが上がることに抵抗がある場合は、スタンドアロン クラスに新しいメソッドを作成するだけで済みます。たとえば、次のようになります。

public bool IsDisplayingTips(){
    return CurrentUser.IsDisplayingTips;
}

そして、あなたのページから呼び出すだけです

bool isDisplayingTips = this.SharedObjects.IsDisplayingTips()
于 2010-09-13T11:37:30.990 に答える
1

使用する:

ページ/マスターページ クラスから呼び出されるスタンドアロン クラス

ただし、そこで停止するのではなく、ベース ページとベース マスター ページを追加します。どちらも共有クラスを使用し、特定のページ/マスター ページ コードを間接的に保持します。

于 2010-09-13T21:19:54.427 に答える
1

あなたの2番目のオプションが嫌いだとは思いません。

MasterPageBaseから派生した などの基本クラスをSystem.Web.UI.MasterPage作成し、この から継承するホームページ用の空の MasterPage を作成することを意味していると思いますMasterPageBase

正しく行われれば、物事が遅くなることはありません...

于 2010-09-13T11:34:15.620 に答える