Чем заменить множественное наследование
От: arbidol http://www.9rays.net/
Дата: 21.02.07 13:22
Оценка:
Нужно реализовать два контрола для ASP.NET:
Один наследует от Control
Другой от HierarchicalDataBoundControl

Но, у них есть весьма обширная общая реализация, которая затрагивает и переплетается зависимостями с "control execution lifecycle".

Т.е. если бы была возможность пронаследовать эту общую часть функционала от одного MyControlBase то было бы замечательно. Но т.к. множественного наследования в .NET нету. То ума не приложу как тут лучше поступить.
Одно понятно — надо вынести куда-то общий функционал.

Подскажите, пожалуйста, может идеи есть какие-то?
Re: Чем заменить множественное наследование
От: Pavel M. Россия  
Дата: 21.02.07 13:24
Оценка:
Здравствуйте, arbidol, Вы писали:



A>Подскажите, пожалуйста, может идеи есть какие-то?


замена множественного наследования — интерфейсы (частично)
замена наследования — агреггирование

комбинируй и все будет хорошо. вынеси общий функционал в отдельный класс.
--------------------------
less think — do more
Re[2]: Чем заменить множественное наследование
От: arbidol http://www.9rays.net/
Дата: 21.02.07 13:41
Оценка:
Допустим, нужно реализовать что-то подобное:


class MyControl1: Control
{
        protected override void OnPreRender(EventArgs e)
        {
           // действия A
        }
        protected override void Render(HtmlTextWriter writer)
        {
           // действия B
        }
}
class MyControl2: WebControl
{
        protected override void OnPreRender(EventArgs e)
        {
           // действия A
        }
        protected override void Render(HtmlTextWriter writer)
        {
           // действия B
        }
}




Как вынести общую функциональность (действия A и B)?
Re[3]: Чем заменить множественное наследование
От: Nirel  
Дата: 21.02.07 14:15
Оценка:
Здравствуйте, arbidol, Вы писали:

A>Допустим, нужно реализовать что-то подобное:



A>
A>class MyControl1: Control
A>{
A>        protected override void OnPreRender(EventArgs e)
A>        {
A>           // действия A
A>        }
A>        protected override void Render(HtmlTextWriter writer)
A>        {
A>           // действия B
A>        }
A>}
A>class MyControl2: WebControl
A>{
A>        protected override void OnPreRender(EventArgs e)
A>        {
A>           // действия A
A>        }
A>        protected override void Render(HtmlTextWriter writer)
A>        {
A>           // действия B
A>        }
A>}
A>


A>Как вынести общую функциональность (действия A и B)?


Сдеся легко. WebControl наследуется от Control. Так что можно сделать следующее:

class MyBaseControl:WebControl
{
...
}

class MC1 : MyBaseControl
{
... // specific
}

class MC2 : MyBaseControl
{
... // specific
}
Re[4]: Чем заменить множественное наследование
От: arbidol http://www.9rays.net/
Дата: 21.02.07 14:21
Оценка:
N>Сдеся легко. WebControl наследуется от Control. Так что можно сделать следующее:

Дело в том, что как раз MyControl1 не наследует (и не должен) от WebControl.

Т.е. если бы был один предок — то понятное дело. А тут — разные
Re: Чем заменить множественное наследование
От: nikov США http://www.linkedin.com/in/nikov
Дата: 21.02.07 14:25
Оценка:
Здравствуйте, arbidol, Вы писали:

A>Подскажите, пожалуйста, может идеи есть какие-то?


паттерн декоратор
Автор(ы): Михаил Новиков
Дата: 08.10.2005
Структурный паттерн Decorator используется в случаях, когда необходимо без применения механизма наследования расширить функциональность класса или же изменить ее. Другими словами появляется альтернатива наследованию, причем классы не закреплены жестко в иерархии. Паттерн действует на уровне объектов, и сам процесс наращивания функциональности происходит во время выполнения, что позволяет динамически менять степень вложенности и выбирать сами декораторы. Второе имя паттерна Decorator это Wrapper, то есть обертка. Это название раскрывает устройство этого шаблона.
.
Re[4]: Чем заменить множественное наследование
От: снежок Россия  
Дата: 21.02.07 18:42
Оценка: +1
Почему бы действия А и действия Б не вынести в статические методы какого-либо helper-класса, в параметрах которых передается Control и доп. объекты контекста?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.