我的winform應用程序包含usercontrols和窗體。使用戶控件和窗體從一個唯一的基本控件繼承
每個用戶控件繼承一個基本的用戶控件,每個表單繼承一個基本表單。
基本的用戶控件和基本形式包含完全相同的屬性和方法,因爲我想要的是在一個地方管理安全和語言設置。
此解決方案正在工作,但我希望我的所有控件(用戶控件和窗體)都繼承一個唯一的基本控件,以便將這些方法放在同一個位置。
有沒有辦法做到這一點?
謝謝!
我的winform應用程序包含usercontrols和窗體。使用戶控件和窗體從一個唯一的基本控件繼承
每個用戶控件繼承一個基本的用戶控件,每個表單繼承一個基本表單。
基本的用戶控件和基本形式包含完全相同的屬性和方法,因爲我想要的是在一個地方管理安全和語言設置。
此解決方案正在工作,但我希望我的所有控件(用戶控件和窗體)都繼承一個唯一的基本控件,以便將這些方法放在同一個位置。
有沒有辦法做到這一點?
謝謝!
從OO的角度來看,在這種情況下繼承並沒有什麼意義。
我建議創建「SecurityManager」和「LanguageManager」類並使用它們從您的基本形式& usercontrol。他們將有一個明確的角色,讓你從一個地方控制邏輯。
我以前遇到過這個問題。不幸的是,由於C#不支持多繼承,因此您的BaseForm
和BaseUserControl
不能繼承BaseFunctions
,Form
和UserControl
(分別)。
我使用的解決方案是創建一個帶有所需方法的接口,並將該功能放置在助手類中。
你還有很多複製麪食,但至少它只是包裝而不是所需的邏輯。
例如:
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);
}
}
我的邏輯是在了SecurityManager和LanguageManager,並且基本形式和BaseUserControl只包含極少的代碼(實際上可以一個屬性和一個方法)。即使代碼不多,它仍然是重複的。 – 2012-03-16 11:23:41
@ Anne-Christine,如果你的基類中的屬性和方法使用你的管理類的實現,那麼不應該有任何重複的代碼。 – 2012-03-16 12:06:01