2012-03-15 72 views
0

我的winform應用程序包含usercontrols和窗體。使用戶控件和窗體從一個唯一的基本控件繼承

每個用戶控件繼承一個基本的用戶控件,每個表單繼承一個基本表單。

基本的用戶控件和基本形式包含完全相同的屬性和方法,因爲我想要的是在一個地方管理安全和語言設置。

此解決方案正在工作,但我希望我的所有控件(用戶控件和窗體)都繼承一個唯一的基本控件,以便將這些方法放在同一個位置。

有沒有辦法做到這一點?

謝謝!

回答

2

從OO的角度來看,在這種情況下繼承並沒有什麼意義。

我建議創建「SecurityManager」和「LanguageManager」類並使用它們從您的基本形式& usercontrol。他們將有一個明確的角色,讓你從一個地方控制邏輯。

+0

我的邏輯是在了SecurityManager和LanguageManager,並且基本形式和BaseUserControl只包含極少的代碼(實際上可以一個屬性和一個方法)。即使代碼不多,它仍然是重複的。 – 2012-03-16 11:23:41

+0

@ Anne-Christine,如果你的基類中的屬性和方法使用你的管理類的實現,那麼不應該有任何重複的代碼。 – 2012-03-16 12:06:01

1

我以前遇到過這個問題。不幸的是,由於C#不支持多繼承,因此您的BaseFormBaseUserControl不能繼承BaseFunctions,FormUserControl(分別)。

我使用的解決方案是創建一個帶有所需方法的接口,並將該功能放置在助手類中。

你還有很多複製麪食,但至少它只是包裝而不是所需的邏輯。

例如:

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); 
    } 
}