Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему запечатывать можно только методы и свойства, и свойства? 
V
    Опции темы
ДобренькийПапаша
Дата 23.8.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Цитата(Gunslinger @  23.8.2010,  10:15 Найти цитируемый пост)
Какой в этом смыл? Т.е. F() уже становится "обычным", не виртуальным методом - его и так уже нельзя будет переопределить в наследнике от B.


sealed в наследнике указываем, чтобы, опять же, явно сказать, что в следующем наследнике по иерархии этот метод нельзя переопределить. Это проектировочное решение. 

Код

class cl
        {
            public virtual void AnMethod()
            {
                return;
            }
        }
        class AnClass:cl
        {
            public override void AnMethod()
            {
                return;
            }
        }

        class Derived : AnClass
        {
            public override void AnMethod()           //Можно переопределить
            {
                return;
            }
        }


Код

class cl
        {
            public virtual void AnMethod()
            {
                return;
            }
        }
        class AnClass:cl
        {
            public override sealed void AnMethod()
            {
                return;
            }
        }

        class Derived : AnClass
        {
            public override void AnMethod()      //Error    1: cannot override inherited member AnClass.AnMethod() because it is sealed
            {
                return;
            }
        }



--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Gunslinger
Дата 23.8.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(ДобренькийПапаша @  23.8.2010,  16:35 Найти цитируемый пост)
sealed в наследнике указываем, чтобы, опять же, явно сказать, что в следующем наследнике по иерархии этот метод нельзя переопределить. 

То есть переопределенный метод так же и виртуальный по умолчанию? 
Виртуальными методы делают,чтобы единообразно работать с объектами различных классов-наследников одного и того же базового класса. Зачем делать так: "в следующем наследнике по иерархии этот метод нельзя переопределить", когда можно унаследоваться от самого базового класса - cl? Только если нужно все содержимое промежуточного класса (AnClass)? Вроде изменить функционал, не копируя вручную содержимое существующего класса? Например:
Car, Mazda : Car, Mazda2 : Mazda?


PM MAIL   Вверх
ДобренькийПапаша
Дата 23.8.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Цитата(Gunslinger @  23.8.2010,  17:25 Найти цитируемый пост)
То есть переопределенный метод так же и виртуальный по умолчанию? 

Да.

Цитата(Gunslinger @  23.8.2010,  17:25 Найти цитируемый пост)
Зачем делать так: "в следующем наследнике по иерархии этот метод нельзя переопределить", когда можно унаследоваться от самого базового класса - cl?


Очевидно, чтобы унаследовать все члены иерархии. Если унаследуем только самый старший класс, то промежуточный унаследован не будет (а он вероятно добавил свои методы...)



--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Gunslinger
Дата 24.8.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(ДобренькийПапаша @  23.8.2010,  19:10 Найти цитируемый пост)
Цитата(Gunslinger @  23.8.2010,  17:25 Найти цитируемый пост)
То есть переопределенный метод так же и виртуальный по умолчанию? 
Да.

Прикольная фишка. В с++ о такой, кажется, не было - в учебниках не встречал. Эта фишка только си шарпа или общая у языков со сборщиком мусора и байт-кодом, как, например, словари и списки?

Цитата(diadiavova @  23.8.2010,  11:30 Найти цитируемый пост)
Ты просто не сможешь его унаследовать, компилятор будет матюгаццо.


Цитата(KelTron @  23.8.2010,  11:30 Найти цитируемый пост)
Индексатор это свойство 

Спасибо.
Но если под свойствами подразумевались и индексаторы, то под методами подразумеваются только методы, или еще события, делегаты, операторы? Ведь с технической точки зрения это тоже методы. 
PM MAIL   Вверх
KelTron
Дата 24.8.2010, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Цитата(Gunslinger @  24.8.2010,  12:37 Найти цитируемый пост)
Но если под свойствами подразумевались и индексаторы, то под методами подразумеваются только методы, или еще события, делегаты, операторы? Ведь с технической точки зрения это тоже методы. 

Оператор - если ты имеешь в виду перегрузку операторов - реализуется в виде функции. Делегат это класс.
http://msdn.microsoft.com/ru-ru/library/900fyy8e.aspx
Цитата

Ключевое слово delegate используется для объявления ссылочного типа, который может быть использован для инкапсуляции именованного или анонимного метода.

Ключевое слово event просто синтаксический сахар, чтобы меньше писать.

http://forum.vingrad.ru/forum/topic-73975.html
http://dev4food.ru/2010/02/kovarnyj-vopros-po-eventdelegate/


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
diadiavova
Дата 24.8.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(Gunslinger @  24.8.2010,  13:37 Найти цитируемый пост)
Но если под свойствами подразумевались и индексаторы

Индексаторы и есть свойства. В бейсике, например, для объявления индексатора даже используется слово Property, хотя компилируется он в то же, во что компилируются индексаторы в шарпе. В рефлексии доступ к индексаторам можно получить так же, как к любым другим свойствам. Просто в шарпе не поддерживаются никакие параметризированные свойства кроме индексаторов, из-за этого синтаксис для их объявления несколько упрощен, но от этого они не перестают быть свойствами. 
Цитата(Gunslinger @  24.8.2010,  13:37 Найти цитируемый пост)
события

События вполне могут быть виртуальными
http://msdn.microsoft.com/ru-ru/library/8627sbea.aspx

Цитата(Gunslinger @  24.8.2010,  13:37 Найти цитируемый пост)
операторы

 smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Gunslinger
Дата 25.8.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



ок.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.4834 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.