使usercontrols和表单继承自唯一的基本控件

时间:2012-03-15 15:09:52

标签: c# winforms forms inheritance user-controls

我的winform应用程序包含用户控件和表单。

每个usercontrol都继承一个基本用户控件,每个表单都继承一个基本表单。

基本用户控件和基本表单包含完全相同的属性和方法,因为我想要的是在一个地方管理安全性和语言设置。

这个解决方案正在运行,但我希望我的所有控件(用户控件和表单)都能继承一个独特的基本控件,以便将这些方法放在一个地方。

有没有办法实现这个目标?

谢谢!

2 个答案:

答案 0 :(得分:2)

从OO的角度来看,在这种情况下继承没有多大意义。

我建议创建“SecurityManager”和“LanguageManager”类,并使用它们的基本形式和类型。用户控件。他们将扮演一个明确的角色,让您从一个地方控制逻辑。

答案 1 :(得分:1)

之前我遇到过这个问题。遗憾的是,由于C#不支持多重继承,因此BaseFormBaseUserControl无法继承BaseFunctionsFormUserControl

我使用的工作是使用所需的方法创建一个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);
    }
}