powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Директива final для виртуальных методов. В чем ее смысл?
8 сообщений из 8, страница 1 из 1
Директива final для виртуальных методов. В чем ее смысл?
    #39794567
Maxim.K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть вкратце: Если виртуальному методу написать 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
Директива final для виртуальных методов. В чем ее смысл?
    #39794569
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim.KА зачем так “городить огород”? Если не хочешь наследования, то просто не объявляй virtual ... тогда никакие final и не нужны
Что делать, если так было объявлено еще раньше?
...
Рейтинг: 0 / 0
Директива final для виртуальных методов. В чем ее смысл?
    #39794571
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim.KА зачем так “городить огород”? Если не хочешь наследования, то просто не объявляй
*virtual* ... тогда никакие *final* и не нужны

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

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

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


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