Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使usercontrols和forms从唯一的基控件继承_C#_Winforms_Forms_Inheritance_User Controls - Fatal编程技术网

C# 使usercontrols和forms从唯一的基控件继承

C# 使usercontrols和forms从唯一的基控件继承,c#,winforms,forms,inheritance,user-controls,C#,Winforms,Forms,Inheritance,User Controls,我的winform应用程序包含用户控件和表单 每个usercontrol继承一个基本usercontrol,每个表单继承一个基本表单 基本usercontrol和基本表单包含完全相同的属性和方法,因为我想要的是在一个地方管理安全性和语言设置 这个解决方案是可行的,但我希望我的所有控件(usercontrols和forms)都继承一个唯一的基控件,以便将这些方法放在一个地方 有没有办法做到这一点 谢谢 从面向对象的角度来看,在这种情况下继承没有多大意义 我建议创建“SecurityManager”

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

每个usercontrol继承一个基本usercontrol,每个表单继承一个基本表单

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

这个解决方案是可行的,但我希望我的所有控件(usercontrols和forms)都继承一个唯一的基控件,以便将这些方法放在一个地方

有没有办法做到这一点


谢谢

从面向对象的角度来看,在这种情况下继承没有多大意义


我建议创建“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);
    }
}