将 private/protected/public 方法设置为事件处理程序是否安全?

Is safe to set a private/protected/public method as event handler?

在分配事件处理程序时,我注意到 Object Inspector 只允许在没有显式访问修饰符的方法之间进行选择。

以下class为例:

  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;

在下拉列表中,Object Inspector只显示MyButtonClick:

由于这个原因,我想知道通过代码将 private/protected/public 方法设置为事件处理程序是否安全,或者是否可能有一些这种做法产生的问题。

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

这是绝对安全的,不用担心任何隐藏的问题。例如,在编写内部有子组件的自定义组件(而不是表单)时,这尤其常见。您几乎可以将它放在任何您想要的位置,但我建议将它保持在 private 以下。