Как я могу структурировать свой код C ++ так, чтобы я писал свои общие методы только один раз? - PullRequest
1 голос
/ 24 марта 2011

Если бы C ++. NET допускал множественное наследование, у меня были бы общие методы в классе и производные от него.

У меня есть классы, производные от Panel, Label, TabControl ... у которых точно такие же методы,

Как я могу структурировать свой код C ++ так, чтобы я писал свои общие методы только один раз?

Вот простой пример свойства, которое я хочу добавить в каждый производный класс.Методы расширения звучат идеально, но не существуют в C ++.

private: int panelBottomMargin;
public:
    [Browsable(true)]
    [CategoryAttribute("Layout"), DescriptionAttribute(
        "Specify the gap between the last control and the bottom of the panel"),
    DefaultValueAttribute(panelBottomMarginDefault)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility::Visible)]
    property int PanelBottomMargin
    {
        int get() { return this->panelBottomMargin; }
        void set(int margin) { this->panelBottomMargin = margin; }
    }

Ответы [ 4 ]

3 голосов
/ 24 марта 2011

Я не могу точно понять, что вы подразумеваете здесь под "общими методами", но, вообще говоря, функции, не являющиеся членами пространства имен, являются лучшим способом сделать это (см. Почти каждый алгоритм в стандартной библиотеке).

Если ему действительно нужен доступ к закрытым атрибутам вашего класса, то, вероятно, он не является распространенным методом и должен быть реализован на уровне наследования, где существует атрибут, с которым он работает.злоупотребление наследованием для помещения общих методов в класс, от которого вы потом наследуете: используйте наследование для расширения, а НЕ для повторного использования.

0 голосов
/ 24 марта 2011

Что не так со статическими методами? Или создание нового класса, который может работать с объектами данного типа? Лучше всего не злоупотреблять наследованием способами, которые явно не следуют доктрине «есть», когда это возможно, используйте «имеет».

Как правило, если MI рассматривается как решение вашей проблемы, которое не включает семантику типа "mixin", вам следует рассмотреть новое решение.

0 голосов
/ 24 марта 2011

Вы можете использовать .NET " методы расширения ", если вам не нужен доступ к закрытым / защищенным полям объекта.

0 голосов
/ 24 марта 2011

Поместите ваши общие методы в класс Utility, создайте экземпляр этого класса (при необходимости передайте объект для работы конструктору).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...