У меня есть две библиотеки компонент. Я хочу создать свой базовый от базовых компонент двух этих библиотек. Как лучше всего поступить?
Отсутствие множественного наследования
От:
Аноним
Дата:
13.10.05 05:24
Оценка:
Базовый от двух базовых создать никак не получится.
Нужно будет делать свой базовый, который будет агрегировать в себе оба нужных класса и перенаправлять вызовы методов к ним.
Т.е.
class Lib1Class
{
public void MethodA();
}
class Lib2Class
{
public void MethodB();
}
class YourBaseClass
{
Lib1Class l1c = new Lib1Class();
Lib2Class l2c = new Lib2Class();
public void MethodA()
{
l1c.MethodA();
}
public void MethodB()
{
l2c.MethodB();
}
}
Можно унаследоваться от одного, а другой агрегировать
Здравствуйте, <Аноним>, Вы писали:
А>У меня есть две библиотеки компонент. Я хочу создать свой базовый от базовых компонент двух этих библиотек. Как лучше всего поступить?
Повеситься
Точнее, надо смотреть в каждом конкретном случае. Не очень понятно, что ты понимаешь под "свой базовый".
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Отсутствие множественного наследования
От:
Аноним
Дата:
13.10.05 06:06
Оценка:
Проблем точно не будет, если унаследоваться от UserControl и агрегировать оба объекта. В принципе получается стандартная ситуация создания UserControl. Можно сделать это прямо с помощью дизайнера студии
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>У меня есть две библиотеки компонент. Я хочу создать свой базовый от базовых компонент двух этих библиотек. Как лучше всего поступить? S>Повеситься
Это пока рано делать S>Точнее, надо смотреть в каждом конкретном случае. Не очень понятно, что ты понимаешь под "свой базовый".
Ну я от этого контрола буду делать все свои проиводные..
Здравствуйте, k_savelev, Вы писали:
_>Базовый от двух базовых создать никак не получится. _>Нужно будет делать свой базовый, который будет агрегировать в себе оба нужных класса и перенаправлять вызовы методов к ним. _>Т.е.
_>class Lib1Class _>{ _> public void MethodA(); _>}
_>class Lib2Class _>{ _> public void MethodB(); _>}
_>class YourBaseClass _>{ _> Lib1Class l1c = new Lib1Class(); _> Lib2Class l2c = new Lib2Class();
_> public void MethodA() _> { _> l1c.MethodA(); _> }
_> public void MethodB() _> { _> l2c.MethodB(); _> } _>}
_>Можно унаследоваться от одного, а другой агрегировать
Это скорее композиция нежели чем просто агрегация.
Здравствуйте, <Аноним>, Вы писали: А>Ну я от этого контрола буду делать все свои проиводные..
Это, конечно, хорошая идея. Но зачем тебе наследоваться от обоих базовых? Чтобы можно было передавать его куда-то в эти библиотеки?
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Отсутствие множественного наследования
От:
Аноним
Дата:
13.10.05 08:06
Оценка:
Я конечно могу жестоко ошибаться, но в приведённом мной примере композиция осуществляется с помощью агрегации...
Т.е. подразумевается, что объекты l1c и l2c создаются во время создания экземпляра класса YourBaseClass и уничтожаются во время его уничтожения
Поправьте меня, пожалуйста, если что, чтобы я не путал Анонима
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали: А>>Ну я от этого контрола буду делать все свои проиводные.. S>Это, конечно, хорошая идея. Но зачем тебе наследоваться от обоих базовых? Чтобы можно было передавать его куда-то в эти библиотеки?
Нет. У одного красивый внешний вид. У другого хорошая функциональность.....
Re[2]: Отсутствие множественного наследования
От:
Аноним
Дата:
13.10.05 08:14
Оценка:
_>>Можно унаследоваться от одного, а другой агрегировать
MN>Это скорее композиция нежели чем просто агрегация.
А примерчеком не поделитесь? Желательно к моей задачи
Здравствуйте, k_savelev, Вы писали:
_>Я конечно могу жестоко ошибаться, но в приведённом мной примере композиция осуществляется с помощью агрегации...
Композиция — частный случай агрегации.
_>Т.е. подразумевается, что объекты l1c и l2c создаются во время создания экземпляра класса YourBaseClass и уничтожаются во время его уничтожения
Именно поэтому приведенный тобой пример скорее композиция нежели чем просто агрегация.
_>Поправьте меня, пожалуйста, если что, чтобы я не путал Анонима
Поправил
Здравствуйте, Аноним, Вы писали:
_>>>Можно унаследоваться от одного, а другой агрегировать
MN>>Это скорее композиция нежели чем просто агрегация.
А>А примерчеком не поделитесь? Желательно к моей задачи
Пример вам привел k_savelev. А мой комментарий относится не к "Можно унаследоваться от одного, а другой агрегировать", а к примеру кода k_savelev.
Если вы имеете ввиду пример смешанных композиции и наследования, то на мой взгляд так вообще лучше никогда не делайте. Слишком "грязный" результат. Ни упрощения, ни оптимизации архитектуры вы от этого не получите.
Здравствуйте, <Аноним>, Вы писали: А>Нет. У одного красивый внешний вид. У другого хорошая функциональность.....
Увы. Даже если бы множественное наследование было, хрен бы ты взял от одного внешний вид, а от другого функциональность...
Это все равно, как ожидать получения TreeGridView путем наследования от TreeView и GridView
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Отсутствие множественного наследования
От:
Аноним
Дата:
13.10.05 12:50
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали: А>>Нет. У одного красивый внешний вид. У другого хорошая функциональность..... S>Увы. Даже если бы множественное наследование было, хрен бы ты взял от одного внешний вид, а от другого функциональность... S>Это все равно, как ожидать получения TreeGridView путем наследования от TreeView и GridView
Да я понимаю....Просто тему так назвал......Просто основная проблема в том, что если мне использовать агрегирование то как мне делать. У меня оба компонента, производные от UserControl. Если я делаю свой, производный от UC а внутри его создаю по экземпляру требуемых классов. То как мне зделать чтобы мой класс красиво выглядел? Ведь выглядит красиво внутренний. Такой же вопрос и по функциональности.....