Delphi 8 - como sobrescrever metodos final |
Top Previous Next |
|
Delphi 8 provides the facility to declare a method of a class as final, but if you really want to override it? Answer:
In Delphi8 the final keyword is introduced, it can be used to specify that a method in a class cannot be reintroduced, in other words, it can be used to break a polymorphic chain of methods.
Why would you want to do that?, one reason is to allow the JITer to optimise method calls, other can be that you don´t want anybody else to extend the functionallity of your code.
Nevertheless, using a dirty hack you can continue to override a final method, supose you have the following code:
type TBaseClass = class public procedure DoSomething;virtual; end;
TDerivedClass = class(TBaseClass) public procedure DoSomething;override;final; end;
Now, since DoSomething is final, if you declare
TAnotherClass = class(TDerivedClass) public procedure DoSomething;override; end;
the compiler gives you the following error: [Error] Project1.dpr(21): Cannot override a final method
If you modify the code for TAnotherClass as follows:
TAnotherClass = class(TDerivedClass) public procedure DoSomething;reintroduce;virtual; end;
You can still call the inherited method like this:
procedure TAnotherClass.DoSomething; begin inherited; // your code here end;
Enjoy. |