2008-10-03 10 views
8

Comment empêcher une fonction/procédure dans une superclasse d'être remplacée dans une sous-classe dans Delphi (2007)? Je veux le marquer pour qu'il ne puisse pas être modifié, je crois qu'il y a un mot-clé final mais je ne peux pas trouver la documentation pour cela, donc je ne suis pas sûr à 100% que c'est ce dont j'ai besoin.Arrêt d'une fonction d'une substitution dans Delphi

Répondre

16

Le mot-clé est final comme vous le pensiez. Voir http://dn.codegear.com/article/34324 et http://blogs.teamb.com/rudyvelthuis/2005/05/13/4311. Vous pouvez également marquer votre classe comme scellée pour empêcher quiconque d'en hériter. Vous avez besoin d'une version Delphi supérieure à 7.

type 
    TSomeClass = class 
    protected 
    procedure SomeVirtualMethod; virtual; 
    end; 

    TOtherClass = class(TSomeClass) 
    protected 
    procedure SomeVirtualMethod; override; final; 
    end; 
9

Vous avez raison - c'est "final". Cet extrait le montre. (De l'un des livres de Marco Cantu)

type 
    TDeriv1 = class (TBase) 
    procedure A; override; final; 
    end; 

    TDeriv2 = class (TDeriv1) 
    procedure A; override; // error: "cannot override a final method" 
    end; 

Compiling donne:

[Pascal Error] Unit1.pas(11): E2352 Cannot override a final method 

Une chose qui m'a surpris: Cette fonctionnalité est prise en charge dans Delphi Win32, pas seulement Delphi pour .NET