![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| magnitudo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
Как известно C# множественное наследование не поддерживает, но мне надо всем классам в моей программе добавить ряд общих методов и полей. К сожалению все эти классы уже унаследованы от каких-либо других классов (Form, Component и т.п.), поэтому воспользоваться наследованием я не могу. Реализовать все это через интерфейс -- не удобно, т.к. придеться переписывать (копировать) реализацию в каждый мой класс. Я вижу следующие пути, но к сожалению не знаю как их реализовать:
1) Переопределить базовый класс Object 2) Использовать аналог C++ директивы #include Прошу помочь с реализацией моей идеи. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
А, может, лучше сэмулировать множественное наследование: http://www.codeproject.com/KB/architecture/smip.aspx?
|
|||
|
||||
| magnitudo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
этот способ уже неплох, но к сожалению он тоже обязывает копировать некоторое количество кода между классами.
Жду новых идей. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
magnitudo, а какие ещё могут быть идеи кроме замены наследования агрегацией?
Такие ограничения в наследовании зашиты в язык на концептуальном уровне... -------------------- СУВ, Partizan. |
|||
|
||||
| magnitudo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
Ну я предложил два варианта, которые я не знаю как реализовать.
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
magnitudo,
первый вариант реализовать не получится, а второй в итоге выльется в такой же копи-паст, как и вариант с заменой наследования агрегированием. -------------------- СУВ, Partizan. |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
magnitudo, попробуем решить проблему методом Йоды - скажи зачем тебе надо добавить методы и поля, как именно ты их будешь использовать - и мы убедим что поля добавить не нужно тебе.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
magnitudo, подобные вещи вполне реализуемы в контексте Аспектно-Ориентированного программирования. В википедии неплохая статья по этому вопросу, там же есть ссылки на компоненты, позволяющие реализовать эту фичу под дотнетом. Лично я попробовал это, результатом остался доволен.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Extension Methods возможно помогут. Но имхо - если такая трабла - значит скорее всего просто где-то подход к решению задачи неправильный)
-------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
| magnitudo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
В общем мне нужны следующие поля: ObjectID - уникальный код объекта ConfigID - идентификатор конфигурационного файла (в перспективе это будет не просто файл, а допустим поток с удаленной машины) в котором храняться параметры моего объекта (файл .xml) ConfigPath - Xpath путь к параметрам объекта, которые храняться в файле ConfigID и ряд методов типа ReadConfig, WriteConfig. Причем часть объектов может быть контейнерами для других объектов, т.е. структура конфигурациооного файла получается вложенная. |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
magnitudo, а общая цель какая? Просто пробежаться по всем-всем-всем объектам приложения и подтянуть определенные свойства из конфига? Т.е. понятно зачем сохранять в конфиг свойства, например, контролов или форм. Или зачем сохранять туда какие-то данные. Но не уверен насколько нужно но запихивать все это в один конфиг.
Если все это делается для сохранения настроек - позиции, шрифтов - посмотри в сторону marker-интерфейсов и рекурсивного обхода дерева контролов. Выставляй свойства через reflection. Если для локализации, и ты собираешься подтягивать строки с какого-то сервера локализации - посмотри в сторону Custom Resource Manager. ... |
|||
|
||||
| magnitudo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
Общая цель примерно следующая: динамическая генерация формы с контролами (возможно вложенными) на основе конфигурационного файла. И контролем доступа пользователя к отдельным контролам.
На пользовательских машинах так и делается, но общий конфиг формы должен быть отдельно. Общий настрой мне в общем понятен, судя по всему моя задача простого решения не имеет и проще все действительно раскопировать нужный код вручную. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
1-в-1 одна из подзадач в проекте с моей прошлой работы таких вопросов как у вас ни у кого даже не возникало... -------------------- СУВ, Partizan. |
|||
|
||||
| magnitudo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.3.2009 Репутация: нет Всего: нет |
Ну и что мне с этим теперь делать Как человек более опытный, поделитесь секретом как вы отличали формы друг от друга (10 форм типа AnyForm) и реализовали контроль прав доступа пользователей к формам и контролам? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
magnitudo, а какой смысл каждую из 10 форм отличать друг от друга?
у нас была ERP-шка, форма могла представлять из себя, допустим, форму для редактирования какого-либо справочника(читай "таблицы"). На разные действия с этой таблицей в БД прописаны права...а контроль возлагался на бизнес-логику и программа сама решала на основе данных из базы кому давать редактирование, а кому - нет...потом, вроде, этот функционал перешёл на уровень субд в виде хранимых процедур...но точно я уже не помню сейчас...это всё было как раз, когда я уходил уже... -------------------- СУВ, Partizan. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |