![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| GRIENDERS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.2.2007 Репутация: нет Всего: 1 |
Есть класс MyClass, естественно наследник класса Object. Можно ли скрыть (не переопределить логику работы, а именно скрыть) методы базового класса, например ToString(), чтобы у объектов MyClass после точки они не появлялись:
Я понимаю, что модификатор доступа нельзя изменить, но у какого-то класса я такое видел, хотя м.б он был статическим? Не помню уже. Это сообщение отредактировал(а) GRIENDERS - 27.1.2008, 15:51 |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
GRIENDERS, нет, при наследовании скрыть члены базового класса нельзя. Впрочем, можно не наследовать, а агрегировать :
и все члены класса A, которые должны быть видны, завернуть в обёртки класса B :
Но в случае с Object это не подходит, поскольку все классы неявно наследуются от Object Это сообщение отредактировал(а) marcusmae - 27.1.2008, 16:02 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| farad |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 1.11.2007 Репутация: -1 Всего: 6 |
ToString есть у всех типов .NET.. его можно только переопределить,а больше ничего не сделать
|
|||
|
||||
| _Jesus |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 16.1.2008 Репутация: нет Всего: нет |
Можешь посмотреть в сторону sealed.
|
|||
|
||||
| GRIENDERS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.2.2007 Репутация: нет Всего: 1 |
_Jesus, интересно как?
|
|||
|
||||
| arilou |
|
||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
GRIENDERS,
только имей ввиду, что этот ToString будет вызываться только, если ты будешь обращаться к нему через
Только так. |
||||
|
|||||
| GRIENDERS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 19.2.2007 Репутация: нет Всего: 1 |
arilou, не работает - из класса А можно обратиться к ToString(), хотя он и будет вызывать метод ToString класса object
Но все равно a.ToString() - ошибки НЕТ, компилируется и работает нормально |
|||
|
||||
| KLUBS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 11.2.2007 Где: Спб Репутация: 1 Всего: 1 |
а что если переопределить ToString() и вызывать исключение?? тогда никто не убдет его использовать)))
|
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Действительно, я был не прав. Признаю. Хотя казалось, что вроде так было... Ну тада возвращаемся к первому вопросу, а зачем оно надо? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
С explicitly реализацией тоже не катит, всё равно intellisence упорно показывает что методы есть, а при выполнении не вызываются методы из реализованного интерфейса. Похоже это фича дотнета такая.
-------------------- ![]() |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Закрыть методы базового класса нельзя
Скрыть (hide) методы базового класса новой реализацией метода? Но для этого существуют виртуальные методы, да и после точки они появятся. Можно не наследоваться, а агрегироваться, как говорилось ранее. Тогда проблема решается. Интерфейсы, как я понимаю, это немного не к этой ситуации. Есть определенная функциональность класса, доступная для всех, а один клиент класса намерен эту доступность отменить. Это не прерогатива клиента, сорри -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |