2012-03-15 75 views
0

我的winform应用程序包含usercontrols和窗体。使用户控件和窗体从一个唯一的基本控件继承

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

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

此解决方案正在工作,但我希望我的所有控件(用户控件和窗体)都继承一个唯一的基本控件,以便将这些方法放在同一个位置。

有没有办法做到这一点?

谢谢!

回答

2

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

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

+0

我的逻辑是在了SecurityManager和LanguageManager,并且基本形式和BaseUserControl只包含极少的代码(实际上可以一个属性和一个方法)。即使代码不多,它仍然是重复的。 – 2012-03-16 11:23:41

+0

@ Anne-Christine,如果你的基类中的属性和方法使用你的管理类的实现,那么不应该有任何重复的代码。 – 2012-03-16 12:06:01

1

我以前遇到过这个问题。不幸的是,由于C#不支持多继承,因此您的BaseFormBaseUserControl不能继承BaseFunctions,FormUserControl(分别)。

我使用的解决方案是创建一个带有所需方法的接口,并将该功能放置在助手类中。

你还有很多复制面食,但至少它只是包装而不是所需的逻辑。

例如:

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); 
    } 
}