我的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