我的winform应用程序包含用户控件和表单。
每个usercontrol都继承一个基本用户控件,每个表单都继承一个基本表单。
基本用户控件和基本表单包含完全相同的属性和方法,因为我想要的是在一个地方管理安全性和语言设置。
这个解决方案正在运行,但我希望我的所有控件(用户控件和表单)都能继承一个独特的基本控件,以便将这些方法放在一个地方。
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:2)
从OO的角度来看,在这种情况下继承没有多大意义。
我建议创建“SecurityManager”和“LanguageManager”类,并使用它们的基本形式和类型。用户控件。他们将扮演一个明确的角色,让您从一个地方控制逻辑。
答案 1 :(得分:1)
之前我遇到过这个问题。遗憾的是,由于C#不支持多重继承,因此BaseForm
和BaseUserControl
无法继承BaseFunctions
,Form
和UserControl
。
我使用的工作是使用所需的方法创建一个IBaseFunctions
接口,并将功能放在一个帮助器类中。
你仍然有很多复制意大利面,但至少它只是包装而不是所需的逻辑。
例如:
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);
}
}