2017-02-27 2 views
0

Beim Zuweisen von Ereignishandlern habe ich festgestellt, dass nur zwischen Methoden auswählen kann, die keinen expliziten Zugriffsmodifikator haben.Ist es sicher, eine private/protected/public-Methode als Event-Handler festzulegen?

die folgende Klasse als Beispiel nehmen:

TMyForm = class(TForm) 
    MyButton: TButton; 
    procedure MyButtonClick(Sender: TObject); 
    private 
    procedure MyButtonPrivateClick(Sender: TObject); 
    protected 
    procedure MyButtonProtectedClick(Sender: TObject); 
    public 
    procedure MyButtonPublicClick(Sender: TObject); 
    end; 

In der Dropdown-Liste zeigt die Object Inspector nur MyButtonClick:

enter image description here

Aus diesem Grund, ich frage mich, ob es sicher ist, um eine private/protected/public Methode per Code an einen Event-Handler zu setzen oder wenn es aus dieser Praxis einige Probleme geben könnte.

MyButton.OnClick := MyButtonPrivateClick; 
//... 
+0

Was passiert, wenn Sie es versuchen? – Lloyd

+0

@Lloyd: Es scheint nichts falsch zu sein, es kompiliert ohne Fehler keine Warnungen und es funktioniert, aber ich weiß nicht, ob es einige Rückseitenaspekt geben könnte, die Probleme in bestimmten Bedingungen verursachen würden – ExDev

+2

Die Methode wird veröffentlicht. Deshalb sehen Sie es im Objektinspektor und nicht in anderen. – kobik

Antwort

3

Dies ist absolut sicher, ohne sich um versteckte Probleme kümmern zu müssen. Dies ist besonders häufig, wenn eine benutzerdefinierte Komponente (im Gegensatz zu einem Formular) geschrieben wird, in der sich beispielsweise eine Unterkomponente befindet. Sie können es praktisch überall hinstellen, aber Sie sollten es unter private behalten.

Verwandte Themen