Как добавить функциональность в классы - PullRequest
0 голосов
/ 16 июня 2011

У меня есть куча классов, которые я хотел бы иметь возможность «закрепить» некоторые функции.

Функциональность включает реализацию свойства и возможность выполнять действие, которое использует это свойство.и другие члены уникальны для каждого класса.Это похоже на интерфейс и абстрактный класс, смешанные вместе.Я не могу использовать подход абстрактного класса, потому что эти классы уже являются подклассами многих различных классов.Я могу использовать интерфейс, но куда мне поместить код?Я устал писать это снова и снова в каждом классе.

Вот пример этой проблемы: я работаю в C #, ASP.NET, веб-формах.Классы, к которым я хотел бы присоединиться, - это пользовательские элементы управления (.ascx, .cs), которые наследуются от множества различных веб-элементов управления.Функциональность связана с регистрацией некоторых скриптов на странице после того, как они создали свои дочерние элементы управления.

Любое понимание приветствуется, спасибо.

Ответы [ 3 ]

1 голос
/ 16 июня 2011

Я думаю, шаблон посетителя может помочь с этим. От Википедия :

Практическим результатом такого разделения является возможность добавления новых операций в существующие структуры объектов без изменения этих структур.

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

1 голос
/ 16 июня 2011

Используйте составной шаблон . Создайте новый объект, который реализует функциональность, которую вы пытаетесь «прикрутить». Создайте интерфейс, который представляет API этого нового объекта. Затем реализуйте интерфейс на ваших объектах:

public class MyCompositeObject: Base, IBoltOn
{
    protected IBoltOn BoltOn = new BoltOn();

    # region IBoltOn members
    public void SomeMethod()
    {
        BoltOn.SomeMethod();
    }
    public sometype SomeProperty {
        get {
           return BoltOn.SomeProperty;
        }
        set {
            BoltOn.SomeProperty=value;
        }
    }
    # endregion
}
1 голос
/ 16 июня 2011

Методы расширения возможно обеспечат то, что вы ищете.

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