![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| cthutq |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
есть класс
хочу наследоваться от него
но что-то не получается создать экземпляр Some. Говорит
сам класс Some находится в библиотеке. А создаю в приложении |
||||||
|
|||||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
к определению конструкторов довавь public, например:
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| cthutq |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
cully, спасибо - ни как не могу привыкнуть
Добавлено @ 23:43 З.Ы. Подскажите еще как обстоит дело в C# с виртуальными функциями Добавлено @ 23:49 и еще - если каждый метод класса может бросить исключение, то есть ли какие способы кроме try/catch, чтоб в главном классе поймать его и например затенить кнопки |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Нормально так дело обстоит: ставим перед функцией модификатор virtual - пожалуйста, виртуальная функция; в производных классах ставим не virtual, а override - пожалуйста, перекрытая виртуальная функция... З.Ы. в студии 2003/2005 есть офигенно удобная фишка: просто набираем (находясь в классе-наследнике) слово override и пробел - и IntelliSence выведет список доступных виртуальных функций ! А нажав Enter, ещё и сгенерирует тело функции. Добавлено @ 00:02
Оператор try/catch на то и придуман, чтобы ловить исключения. Если нужно ловить исключение в базовом классе, то пусть метод базового класса "Base.Method" вызывает некий другой метод "virtual Base.DoMethod", который можно будет перекрыть в производном классе. Тогда вызов метода DoMethod можно будет заключить в try/catch в базовом классе и обработать исключение. -------------------- ![]() |
|||
|
||||
| cthutq |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
override я так понимаю это перегруженная |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
нет, перекрытая перегруженная - это overloaded, т.е. с отличающейся сигнатурой (другой набор аргументов) -------------------- ![]() |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
Как модератор скажу: один топик - один вопрос. Впредь попрошу придерживаться этого правила.
Но на вопросы отвечу. 1. Чтобы сделать метод виртуальным его надо пометить ключевым словом virtual. Чтобы его перекрыть в потомке надо использовать ключевое слово override. MSDN тебе в помощь. 2. Это уже от тебя как от программиста зависит как ты реализуешь обработку исключений. Можно каждое обращение к объекту завернуть в try-catch, что есть лучший вариант. Можно в классе сделать событие, скажем, ExceptionThrown на него повесить обработчик затенения. Можно использовать событие Application.ThreadException или AppDomain.UnhandledException, в обработчике выполнять проверки и затенять кнопки. Вторые два способа упрощают работу, но плохи с точки зрения дизайна кода. Добавлено @ 00:06 mr.DUDA, опередил, блин. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Модератор: Сообщение скрыто. -------------------- ![]() |
|||
|
||||
| cthutq |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
понял - спасибо
ну тема про наследование, поэтому...
не очень удобно из catch дергать один и тотже метод можно тут поподробнее. Я могу конечно залесть в камасутру (MSDN), но с С++ тядело так сразу |
||||||
|
|||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
То, о чём говорит уважаемый мной cully, не есть синтаксический сахар C#, а лишь одна из возможностей, предоставляемых .NET Framework - любое необработанное исключение можно "обработать", подписавшись на одно из указанных событий... Единственный минус: исключение так и останется необработанным, а мы лишь можем оставить след в лог-файле или вывести MessageBox с извинением об ошибке. З.Ы, это к тому, что от грамотного проектирования последовательности вызовов и структурированной обработки исключений никто нас не избавляет. Добавлено @ 00:20 вообще-то, в самом деле, одна тема - один вопрос -------------------- ![]() |
|||
|
||||
| cthutq |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
просто мне приходится создавать класс, который можит бросить исключение. А помимо этого я создаю однотипный класс, который имеет теже функции, но с try/catch. И в каждом catch я дергаю метод. Сделать это в самом классе не могу, потому, что не знаю что нужно в catch (это знает только использующий класс). А вот если можно как вы говорите зарегистрироваться на это исключение и только в одном месте вызывать функцию - то это должно быть ужобно. Только не понятно почему оно не будет обработано ? |
|||
|
||||
| stab |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
Класс с исключениями:
Его использование:
Поверь, это чОрная магия, это неправильно. -------------------- 6, 6, 6 - the number of the beast. |
||||
|
|||||
| cthutq |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 16.4.2006 Репутация: нет Всего: нет |
раз уж зашел разговор про виртуальные методы - то можно ли тогда excption на него возложить ? З.Ы. Только еще вопрос - есть ли в C# чисто виртуальные методы. 1. Если нет, то нужно класс объявить как abstract ? 2. Если да, то нужно ли перекрывать все виртуальные методы. Или можно только... как сказать не знаю (В С++ это чисто виртуальные)... только чисто виртуальные ? |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
cthutq, абстрктные ( С# )== Чисто внатуре виртуальные( С++). Любой класс\структура содержащие абстрактные методы должен сам быть обьявлен абстрактным.
ЗЫ Я уже предвижу след. вопрос про Интерфейсы Это сообщение отредактировал(а) nikitao - 10.9.2006, 00:51 -------------------- Жизнь - печальная штука. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
Чисто виртуальные методы есть, называют их абстрактными, и объявляться они могут только в абстрактынх классах:
1. Да. 2. Все не надо, надо только абстрактные. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
Кстати любой виртуальный\абстрактный метод не может быть обьявлен как private по очевидным причинам.
-------------------- Жизнь - печальная штука. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Полностью поддерживаю Неужели так уж обязательно, чтобы исключение типа X съедалось втихую (т.е. не передавалось по стеку вверх), но с вызовом метода Y ? Речь не о log-ировании исключений, случайно ? P.S. виртуальные и абстрактные могут быть не только методы, но и свойства. А ещё есть такая штука как interface, но это в отдельную тему. -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |