Создание пользовательских контролов и форм, наследуемых от уникального базового элемента управления - PullRequest
0 голосов
/ 15 марта 2012

Мое приложение winform содержит пользовательские элементы управления и формы.

Каждый usercontrol наследует базовый usercontrol, а каждая форма наследует базовую форму.

Базовый usercontrol и базовая форма содержат одинаковые свойства и методы, потому что мне нужно управлять настройками безопасности и языка в одном месте.

Это решение работает, но я хотел бы, чтобы все мои элементы управления (пользовательские элементы управления и формы) наследовали уникальный базовый элемент управления, чтобы эти методы были в одном месте.

Есть ли способ достичь этого?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Наследование в этом случае не имеет особого смысла с точки зрения ОО.

Я предлагаю создать классы "SecurityManager" и "LanguageManager" и использовать их из вашей базовой формы и пользовательского контроля.Они будут играть четкую роль и позволят вам контролировать логику из одного места.

1 голос
/ 15 марта 2012

Я сталкивался с этой проблемой раньше. К сожалению, поскольку 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...