![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| StepS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 26.8.2005 Где: Днепропетровск Репутация: нет Всего: нет |
Привет всем ! Есть класс (типа статический) у него есть конструктор или другой метод (не важно) который инициализирует этот класс. Так вот, задача в том чтобы этот метод могли вызывать только определенные классы, не наследники. Как такое можно сделать ? что-то мне подсказывает что это нужно решать с помощью атрибутов !
Кто-то такое уже делал ? или где можно про это почитать ? Ответы : "в МСДН", "МСДН рулит" и т.п. не в счет, смотрел - ничего не нашел или тогда прямую ссылку в МСДН-е. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Как вариант, пометить метод internal и поместить этот класс с теми, которые должны иметь к нему доступ, в отдельную сборку.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Методы класса может вызвать любой другой класс. Другое дело, ты можешь ограничить область видимости метода.
А если подобное приходится делать, приложение неверно спроектировано. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Хех... Я плохо помню, но разве паттерн Хранитель (Memento) не на этом основан? В С++ такое дело реализовывается при помощи модификатора friend, а вот в C# такого нет. Это сообщение отредактировал(а) Дрон - 10.1.2006, 19:35 -------------------- Да. Именно так. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Ну, Мементо я не помню, найди в сети, но если просто так, то вот:
Но этот механизм довольно примитивный и полностью разрушает инкапсуляцию. Это сообщение отредактировал(а) Дрон - 10.1.2006, 19:55 -------------------- Да. Именно так. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вот наверное поэтому его и нет в сишарпе -------------------- ![]() |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Хм. Но все равно прикольно. Было бы классно нечто вроде
|
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
StepS
Мой способ - самый извращенный |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
arilou
Да, это решение. Но нужно учесть, что проверка происходит во время выполнения, а не компиляции (как в С++).
Возможно, хотя private метод всё равно можно вызвать через Reflection -------------------- Да. Именно так. |
|||
|
||||
| StepS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 26.8.2005 Где: Днепропетровск Репутация: нет Всего: нет |
я в принципе согласен с exception что программа не правильно спроектирована, но пример с использованием атрибутов мне понравился. Было бы прикольно.
Спасибо за помощь всем |
|||
|
||||
| deviLoper |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 11.1.2006 Репутация: нет Всего: нет |
Вот еще вариант: если по стуктуре у этого класса не предусмотренно потомков то можно придумать что-то вроде:
тогда во всех классах, где нужно использовать метод объявляется приват наследник базового класса и через него вызывается нужный метод. |
|||
|
||||
| StepS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 26.8.2005 Где: Днепропетровск Репутация: нет Всего: нет |
у этого класса предусмотрены потомки
Он реализует основной функционал, а вот инициализация должна вызываться единожды и определенным классом я уже пересмотрел модель классов и изменил так чтоб избежать этого. Но из ответов почерпнул новое |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |