Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Директива final для виртуальных методов. В чем ее смысл? / 8 сообщений из 8, страница 1 из 1
01.04.2019, 13:27
    #39794567
Maxim.K
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
Суть вкратце: Если виртуальному методу написать final , то его нельзя будет наследовать:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
type
  Base = class
    procedure TestProcedure; virtual;              // можно наследовать
    procedure TestFinalProcedure; virtual; final;  // нельзя наследовать
  end;

  Derived = class(Base)
    procedure TestProcedure; override;
    procedure TestFinalProcedure; override;  // ... тут ошибка: E2352 Cannot override a final method
  end;


Вроде понятно.
Внимание вопрос: А зачем так “городить огород”? Если не хочешь наследования, то просто не объявляй virtual ... тогда никакие final и не нужны

Так зачем final ?
Пожалуйста, поделитесь идеями.

P.S.
раздел “Final Methods” в официальном Help:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Methods_(Delphi)#Virtual_and_Dynamic_Methods
...
Рейтинг: 0 / 0
01.04.2019, 13:29
    #39794569
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
Maxim.KА зачем так “городить огород”? Если не хочешь наследования, то просто не объявляй virtual ... тогда никакие final и не нужны
Что делать, если так было объявлено еще раньше?
...
Рейтинг: 0 / 0
01.04.2019, 13:31
    #39794571
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
Maxim.KА зачем так “городить огород”? Если не хочешь наследования, то просто не объявляй
*virtual* ... тогда никакие *final* и не нужны

Попробуй расширить своё сознание и представить иерархию классов со вложенностью более одного.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.04.2019, 14:02
    #39794591
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
Maxim.KА зачем так “городить огород”?
С точки зрения изобразительных возможностей языка она действительно не нужна. Но если есть многоуровневая структура классов, в которой базовые спроектированы не тобой и недоступны для изменения, она в некоторых случаях позволяет купировать последствия ошибок проектирования этой структуры. Кроме того, она в принципе позволяет генерировать более эффективный код для вызова таких методов.
...
Рейтинг: 0 / 0
01.04.2019, 14:40
    #39794617
High.Programer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
Dimitry SibiryakovПопробуй расширить своё сознание и представить иерархию классов со вложенностью более одного.

Вынужен вас разочаровать, в Delphi классы наследуются , а не "вкладываются".

P.S.
(и чтоб не уподобаться "некоторым") отвечаю по теме: Директива final, для виртуальных методов это скорее всего опечатака в Help-у. Т.к. прерывать виртуальное-наследование имеет смысл только для override (и бессмысленно для virtual)
Код: pascal
1.
2.
3.
4.
Вместо: 
   procedure TestFinalProcedure; virtual; final;
Должно быть:
   procedure TestFinalProcedure; override; final;
...
Рейтинг: 0 / 0
01.04.2019, 14:57
    #39794635
High.Programer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
softwarer позволяет купировать последствия ошибок проектирования этой структуры.
... еще раз проверим:
директиву virtual пишет сам проектировщик базового класса.
А "купировать последствия" директивой final будет сторонний пользователь этого класса, у него есть возможность сделать override
Но в embarcadero Help указано, что final используется с virtual - но это глупость, т.к. зачем объявлять virtual и сразу же его запрещать.
...
Рейтинг: 0 / 0
02.04.2019, 01:56
    #39794903
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
High.ProgramerНо в embarcadero Help указано, что final используется с virtual - но это глупость, т.к. зачем объявлять virtual и сразу же его запрещатьНе боги горшки обжигают хелп пишут. Придираться к подобному - моветон, на фоне других проблем делфи
...
Рейтинг: 0 / 0
02.04.2019, 10:22
    #39794991
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Директива final для виртуальных методов. В чем ее смысл?
Зарепорть баг, пофиксят.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Директива final для виртуальных методов. В чем ее смысл? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]