Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> #include в C#, аналог множественного наследования в C# 
:(
    Опции темы
magnitudo
Дата 23.3.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Как известно C# множественное наследование не поддерживает, но мне надо всем классам в моей программе добавить ряд общих методов и полей. К сожалению все эти классы уже унаследованы от каких-либо других классов (Form, Component и т.п.), поэтому воспользоваться наследованием я не могу. Реализовать все это через интерфейс -- не удобно, т.к. придеться переписывать (копировать) реализацию в каждый мой класс. Я вижу следующие пути, но к сожалению не знаю как их реализовать:
1) Переопределить базовый класс Object
2) Использовать аналог C++ директивы #include
Прошу помочь с реализацией моей идеи.
PM MAIL   Вверх
Idsa
Дата 23.3.2009, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



А, может, лучше сэмулировать множественное наследование: http://www.codeproject.com/KB/architecture/smip.aspx?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
magnitudo
Дата 23.3.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



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

Жду новых идей.
PM MAIL   Вверх
Partizan
Дата 23.3.2009, 11:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



magnitudo, а какие ещё могут быть идеи кроме замены наследования агрегацией? smile 

Такие ограничения в наследовании зашиты в язык на концептуальном уровне...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
magnitudo
Дата 23.3.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Ну я предложил два варианта, которые я не знаю как реализовать.
PM MAIL   Вверх
Partizan
Дата 23.3.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



magnitudo, 

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


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
PashaPash
Дата 23.3.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



magnitudo, попробуем решить проблему методом Йоды - скажи зачем тебе надо добавить методы и поля, как именно ты их будешь использовать - и мы убедим что поля добавить не нужно тебе. 


--------------------
PM MAIL WWW   Вверх
diadiavova
Дата 23.3.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



magnitudo, подобные вещи вполне реализуемы в контексте Аспектно-Ориентированного программирования. В википедии неплохая статья по этому вопросу, там же есть ссылки на компоненты, позволяющие реализовать эту фичу под дотнетом. Лично я попробовал это, результатом остался доволен.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
archeg
Дата 23.3.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Extension Methods возможно помогут. Но имхо - если такая трабла - значит скорее всего просто где-то подход к решению задачи неправильный)


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
magnitudo
Дата 23.3.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Цитата

скажи зачем тебе надо добавить методы и поля, как именно ты их будешь использовать - и мы убедим что поля добавить не нужно тебе. 


В общем мне нужны следующие поля:
ObjectID - уникальный код объекта
ConfigID - идентификатор конфигурационного файла (в перспективе это будет не просто файл, а допустим поток с удаленной машины) в котором храняться параметры моего объекта (файл .xml)
ConfigPath - Xpath путь к параметрам объекта, которые храняться в файле ConfigID

и ряд методов типа ReadConfig, WriteConfig.

Причем часть объектов может быть контейнерами для других объектов, т.е. структура конфигурациооного файла получается вложенная.
PM MAIL   Вверх
PashaPash
Дата 23.3.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



magnitudo, а общая цель какая? Просто пробежаться по всем-всем-всем объектам приложения и подтянуть определенные свойства из конфига? Т.е. понятно зачем сохранять в конфиг свойства, например, контролов или форм. Или зачем сохранять туда какие-то данные. Но не уверен насколько нужно но запихивать все это в один конфиг.
Если все это делается для сохранения настроек - позиции, шрифтов - посмотри в сторону marker-интерфейсов и рекурсивного обхода дерева контролов. Выставляй свойства через reflection. 
Если для локализации, и ты собираешься подтягивать строки с какого-то сервера локализации - посмотри в сторону Custom Resource Manager.
...


--------------------
PM MAIL WWW   Вверх
magnitudo
Дата 23.3.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Общая цель примерно следующая: динамическая генерация формы с контролами (возможно вложенными) на основе конфигурационного файла. И контролем доступа пользователя к отдельным контролам.

Цитата

Если все это делается для сохранения настроек - позиции, шрифтов....

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


Общий настрой мне в общем понятен, судя по всему моя задача простого решения не имеет и проще все действительно раскопировать нужный код вручную.
PM MAIL   Вверх
Partizan
Дата 23.3.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Цитата

 динамическая генерация формы с контролами (возможно вложенными) на основе конфигурационного файла. И контролем доступа пользователя к отдельным контролам.


1-в-1 одна из подзадач в проекте с моей прошлой работы smile Был дизайнер форм. Формы со всеми вложенными контролами и их свойствами сериализовались в xml и хранились в базе...

таких вопросов как у вас ни у кого даже не возникало...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
magnitudo
Дата 23.3.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Цитата

таких вопросов как у вас ни у кого даже не возникало...


Ну и что мне с этим теперь делать  smile 

Как человек более опытный, поделитесь секретом как вы отличали формы друг от друга (10 форм типа AnyForm) и реализовали контроль прав доступа пользователей к формам и контролам?
PM MAIL   Вверх
Partizan
Дата 23.3.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



magnitudo, а какой смысл каждую из 10 форм отличать друг от друга?

у нас была ERP-шка, форма могла представлять из себя, допустим, форму для редактирования какого-либо справочника(читай "таблицы"). На разные действия с этой таблицей в БД прописаны права...а контроль возлагался на бизнес-логику и программа сама решала на основе данных из базы кому давать редактирование, а кому - нет...потом, вроде, этот функционал перешёл на уровень субд в виде хранимых процедур...но точно я уже не помню сейчас...это всё было как раз, когда я уходил уже...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.