Delphi 访问受保护的属性

Delphi 访问受保护的属性,delphi,Delphi,我有一个从Tobject派生的类。在我的类中,我想使用控件的受保护属性。这是我的密码 type THack = class(Tcontrol); TMyClass = class(TObject) private A: string; B: string; C: string; D: string; public procedure DoSomthing(MyForm: TForm);

我有一个从Tobject派生的类。在我的类中,我想使用控件的受保护属性。这是我的密码

    type
    THack = class(Tcontrol);

    TMyClass = class(TObject)
    private
      A: string;
      B: string;
      C: string;
      D: string;
    public
      procedure DoSomthing(MyForm: TForm);
    end;

  procedure TMyClass.DoSomthing(MyForm: TForm);
  var
    I: Integer;
  begin
    for I := 0 to MyForm.ControlCount - 1 do
    begin
      // I want to read Font property
      showmessage(inttostr(THack(MyForm.Controls[I]).Font.Size));
   end; 
  end;

是否有其他方法可以访问受保护的属性我知道可以执行此任务的选项有:

  • 问题中演示的经典受保护黑客
  • 新型RTTI
  • 类助手

  • 您可能希望改用表单的public
    控件
    属性。如果确实要使用受保护的属性,请从拥有该属性的类继承如下内容:
    TMyClass=class(TControl)
    TMyClass=class(THack)
    @fantagirocco,而不是访问字体属性,我必须键入case TMyClass(MyForm.Controls[i]).字体。size@fantaghirocco-字体在TControl中受保护。我还可以访问其他字段,例如TMyClass(MyForm.Controls[i])。A哪一个错误?您想访问表单上所有控件的属性,还是只访问特定的一组?如果需要一个特定的组,那么我建议更好地定义这些控件的选择。如果您知道这些控件的类,那么您很可能能够通过适当的强制转换更好地控制它们。我们使用帮助器类的原因是为了扩展基类的功能。我不是专家,但你认为使用helper类是正确的方法吗?@RahulBajaj很难给出这样的一般性建议。有时,您可能更喜欢使用经典的hack,有时,在助手的帮助下,代码可能更清晰。帮手也有缺点。在代码中的任何给定点,只有一个可以处于活动状态。这真的是由你来决定你想怎么做。