![]() |
Модераторы: Partizan, gambit Страницы: (74) « Первая ... 12 13 [14] 15 16 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]() ![]() ![]() |
|
Xao |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 24.12.2007 Репутация: нет Всего: 1 |
Разбираюсь с наследованием, классами и интерфейсами, есть момент, который не понял
Код:
Результат:
1) Последний результат оказался не тот, который я ожидал(400), ведь в данном случае должен был вызваться метод CalculateArea() класса square. В чем может быть ошибка? 2) В классе Rectangle в описании метода CalculateArea нужно использовать ключевое слово new. Для чего это делается? 3) Обязательно ли класс Rectangle надо наследовать не только от класса Square, но и от интерфейса IShape? |
||||
|
|||||
nmn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: нет Всего: 1 |
1. В square хранится не Square а Rectangle. 2. Самому интересно ![]() 3. Что значит обязательно? Вас никто не заставляет. Хотя если убрать наследование нельзя будет присвоить переменной типа Square переменную типа Rectangle. |
|||
|
||||
Xao |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 24.12.2007 Репутация: нет Всего: 1 |
nmn,
1)
в этом случае тоже в square хранится Rectangle, однако все правильно работает, я предполагаю, что понижение типа можно использовать только 1 раз, хотя не уверен 2) с или без - результат один и тот же, но выдается предупреждение, если без new 3) можно, когда я убираю наследование от интерфейса IShape, неправильный результат выдает метод CalculateArea(), при понижении типа до IShape, т.е.
ну с наследованием вроде понятно, что Rectangle должен наследоваться от тех интерфейсов, до которых будет происходит понижение типа переменных типа Rectangle |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
Xao, new подавляет предупреждение о том, что невиртуальным метод с той же сигнатурой есть и родителе...вообще вам надо пометить в Rectangle метод CalculateArea ключевым словом virtual, а в его наследнике - пометить словом override
-------------------- СУВ, Partizan. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 9 Всего: 49 |
Xao, в .net немного не так организована работа с интерфейсами. От интерфейса не наследуются, его реализуют. Вот эта строчка:
это не "понижении типа". Это получение ссылки на реализацию интерфейса IShape в объекте, на который ссылается square. У тебя 2 реализации IShape, при приведении выбирается ближайшая - в классе Rectangle. Правильный подход - оставить одну реализацию, в Square, и сделать функцию CalculateArea виртуальной, а в Rectangle ее переопределить. |
|||
|
||||
Xao |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 24.12.2007 Репутация: нет Всего: 1 |
ближайшая - это реализация Square?
так:
если да, то результат неверный:
По поводу приведения типов! т.е. когда я делаю так:
то вызывается метод типа Square, т.к. в классе Square он реализован а когда так:
то вызывается метод типа Rectangle, т.к. в IShape этот метод не реализован, а только определен, а square это по идее экземпляр Rectangle выходит, что это такая особенность приведения типов? |
||||||||||
|
|||||||||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
удалил
Это сообщение отредактировал(а) Partizan - 10.1.2009, 18:24 -------------------- СУВ, Partizan. |
|||
|
||||
Sovereign |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 7.11.2006 Репутация: нет Всего: 4 |
как в dataGridView сделать нумерацию строк?
![]() |
|||
|
||||
Kolovorot |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 12.1.2009 Репутация: нет Всего: 3 |
Как сделать подсказку в конструкторе, которая показывает ограничение для вводимых данных. Например http://ipicture.ru/Gallery/Viewfull/11531855.html В данном случаи показывается ограничение по году, месяцу и дню.
Partizan, благодарю. Это сообщение отредактировал(а) Kolovorot - 12.1.2009, 18:14 --------------------
Никогда еще истина не повисала на руке безусловного. Фридрих Ницше. Так говорил Заратустра |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 8 Всего: 67 |
Kolovorot, это всё берётся из xml-комментариев..
Надо всего лишь написать /// перед объявлением метода/конструктора/... чтобы сгенерировался xml-комментарий -------------------- СУВ, Partizan. |
|||
|
||||
EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
1). Как в .NET организовать проверку на существование сторонних (не системных) библиотек.
Например, я создал класс и подключаю его вручную к проекту, а пользователь эту ддлку потерял, и чтоб приложение перехватывало это исключение а не JIT? 2). Почему CLR .NET выдает исключение на батовский файл? В бате пишу shutdown с параметрами. Это сообщение отредактировал(а) EgoBrain - 13.1.2009, 05:34 |
|||
|
||||
Xao |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 24.12.2007 Репутация: нет Всего: 1 |
EgoBrain,
ты можешь сделать проверку на наличие файла длл |
|||
|
||||
Unsane |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 8.6.2007 Репутация: 2 Всего: 5 |
Совсем дурацкий вопрос. Как получить имя директории из пути?
Пример: Путь "c:\mydirectory\dir\". Надо получить "dir".. --------------------
Я дурак.. Этим и интересен! |
|||
|
||||
EgoBrain |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
Класс DerictoryInfo. Добавлено через 5 минут и 29 секунд
Как проверить, если я подключал бибилиотеку через визуальное проектирование References->AddItem->Browes... ? |
||||
|
|||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 1 Всего: 372 |
Unsane, посмотри System.IO.Path, может там подойдет одна из функций
![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | .NET для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |