C# 使usercontrols和forms从唯一的基控件继承
我的winform应用程序包含用户控件和表单 每个usercontrol继承一个基本usercontrol,每个表单继承一个基本表单 基本usercontrol和基本表单包含完全相同的属性和方法,因为我想要的是在一个地方管理安全性和语言设置 这个解决方案是可行的,但我希望我的所有控件(usercontrols和forms)都继承一个唯一的基控件,以便将这些方法放在一个地方 有没有办法做到这一点C# 使usercontrols和forms从唯一的基控件继承,c#,winforms,forms,inheritance,user-controls,C#,Winforms,Forms,Inheritance,User Controls,我的winform应用程序包含用户控件和表单 每个usercontrol继承一个基本usercontrol,每个表单继承一个基本表单 基本usercontrol和基本表单包含完全相同的属性和方法,因为我想要的是在一个地方管理安全性和语言设置 这个解决方案是可行的,但我希望我的所有控件(usercontrols和forms)都继承一个唯一的基控件,以便将这些方法放在一个地方 有没有办法做到这一点 谢谢 从面向对象的角度来看,在这种情况下继承没有多大意义 我建议创建“SecurityManager”
谢谢 从面向对象的角度来看,在这种情况下继承没有多大意义
我建议创建“SecurityManager”和“LanguageManager”类,并从基本表单和usercontrol中使用它们。它们将有一个明确的角色,让您从一个地方控制逻辑。从面向对象的角度来看,在这种情况下继承没有多大意义
我建议创建“SecurityManager”和“LanguageManager”类,并从基本表单和usercontrol中使用它们。他们将有一个明确的角色,让你从一个地方控制逻辑。我以前遇到过这个问题。不幸的是,由于C#不支持多重继承,您的
BaseForm
和BaseUserControl
无法分别从BaseFunctions
和Form
和UserControl
继承
我使用的解决方法是使用所需的方法创建一个IBaseFunctions
接口,并将该功能放置在helper类中
你仍然有很多仿意大利面,但至少只是包装而已,没有必要的逻辑
例:
我以前遇到过这个问题。不幸的是,由于C#不支持多重继承,您的
BaseForm
和BaseUserControl
无法分别从BaseFunctions
和Form
和UserControl
继承
我使用的解决方法是使用所需的方法创建一个IBaseFunctions
接口,并将该功能放置在helper类中
你仍然有很多仿意大利面,但至少只是包装而已,没有必要的逻辑
例:
我的逻辑在SecurityManager和LanguageManager中,BaseForm和BaseUserControl只包含最少的代码(实际上是一个属性和一个方法)。即使代码不多,它仍然是重复的。@Anne Christine,如果基类中的属性和方法使用管理器类的实现,则不应该有任何重复的代码。我的逻辑在SecurityManager和LanguageManager中,BaseForm和BaseUserControl只包含最少的代码(实际上是一个属性和一个方法)。即使代码不多,它仍然是重复的。@Anne Christine,如果基类中的属性和方法使用管理器类的实现,则不应该有任何重复的代码。
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);
}
}