2012-03-15 16 views
0

私のwinformアプリケーションには、ユーザーコントロールとフォームが含まれています。usercontrolsとフォームを一意のベースコントロールから継承させる

各ユーザーコントロールは基本ユーザーコントロールを継承し、各フォームは基本フォームを継承します。

base usercontrolとbaseフォームは、セキュリティと言語の設定を1か所で管理するため、同じプロパティとメソッドが含まれています。

このソリューションは機能していますが、これらのメソッドを1つの場所に持つためには、すべてのコントロール(ユーザーコントロールとフォーム)が独自の基本コントロールを継承したいと考えています。

これを達成する方法はありますか?

ありがとうございます!

答えて

2

この場合の継承は、OOの観点からはあまり意味がありません。

"SecurityManager"クラスと "LanguageManager"クラスを作成し、基本フォーム& usercontrolから使用することをお勧めします。彼らは明確な役割を持ち、1つの場所からロジックを制御できるようになります。

+0

私のロジックはセキュリティマネージャとLanguageManagerであり、基本形とBaseUserControlだけ最小限のコード(acutallyつの特性と一つの方法)を含みます。あまりコードではないとしても、それはまだ複製されています。 –

+0

@ Anne-Christine、ベースクラスのプロパティとメソッドがマネージャクラスの実装を使用する場合、重複したコードはありません。 –

1

私はこれまでにこの問題に遭遇しました。残念ながら、C#は複数の継承をサポートしていないため、BaseFormBaseUserControlBaseFunctionsFormUserControl(それぞれ)を継承できません。

私が使用する回避策は、必要なメソッドを持つIBaseFunctionsインターフェイスを作成し、ヘルパークラスに機能を配置することです。

あなたはまだ多くのコピーパスタを持っていますが、少なくともそれは単なるラッピングであり、必要なロジックではありません。

EX:

public interface IBaseFunctions 
{ 
    IUser GetCurrentUser(); 

    void ShowMessage(String message); 
}  

public class BaseFunctionsHelper : IBaseFunctions 
{ 
    public IUser GetCurrentUser() 
    { 
     // Get Current User 
    } 

    public void ShowMessage(String message) 
    { 
     // Show message 
    } 
} 

public class BaseForm : Form, IBaseFunctions 
{ 
    private readonly IBaseFunctions _helper = new BaseFunctionsHelper(); 

    public IUser GetCurrentUser() 
    { 
     return _helper.GetCurrentUser(); 
    } 

    public void ShowMessage(String message) 
    { 
     return _helper.ShowMessage(message); 
    } 
} 

public class BaseControl : UserControl, IBaseFunctions 
{ 
    private readonly IBaseFunctions _helper = new BaseFunctionsHelper(); 

    public IUser GetCurrentUser() 
    { 
     return _helper.GetCurrentUser(); 
    } 

    public void ShowMessage(String message) 
    { 
     return _helper.ShowMessage(message); 
    } 
} 
関連する問題