【问题标题】:is it possible to change a method body in delphi (override an object method)?是否可以在 delphi 中更改方法体(覆盖对象方法)?
【发布时间】:2015-09-05 17:59:23
【问题描述】:

我是 java 专家,当我像下面这样声明时,我曾经覆盖 java 中对象的方法:

    public void main(String[] args){
             ...
         JTextField jtf=new JTextField(){

                @override
                public boolean isEditable(){
                        return false;
                }
           }

    }

在 delphi 中有一种方法可以访问方法(函数和过程)并在开始结束之间覆盖它们的主要代码。它可能看起来像这样:

       type
           TForm1 = class(TForm)
           Button1: TButton;
           Timer1: TTimer;
           SpinEdit1: TSpinEdit;

           procedure number(Sender: Tobject);
    .
    .
    .

     procedure number(Sender: Tobject);
     begin
           SpinEdit1.Button.OnDownClick;
             begin
                  SpinEdit1.Increment:=SpinEdit1.Value*2;
             end;

           SpinEdit1.Button.OnUpClick;
             begin
                  SpinEdit1.Increment:=SpinEdit1.Value div 2;
             end;         
     end;

有没有办法覆盖 OnUpClick 和 OnDownClick ?我试图搜索,但我很幸运找到它的关键字

【问题讨论】:

  • 你说的是如何在运行时分配事件方法?你的例子对我来说没有多大意义。
  • 我以为我看到你说你是 Delphi 的新手。您是否已经了解如何使用 Object Inspector 在事件处理程序(例如,单击按钮时的处理程序)中添加代码?
  • @TLama in java 这太有用了,因为您可以只为一个对象更改特定方法,而无需创建所有新类和继承,还有 beta 注释。
  • @MartynA 我还没有尝试从 java 迁移到 delphi 。我马上就做,谢谢。

标签: java delphi overriding


【解决方案1】:

Delphi 中没有类似的功能。您需要显式派生一个子类并覆盖那里的方法。你不能像在 Java 中演示的那样内联。即便如此,您也只能覆盖已声明为 virtualdynamic 的方法。

但是如果你想声明一个事件处理程序,你不需要子类。在表单中声明一个事件处理程序并将其附加到事件中。最简单的方法是双击对象检查器中的事件。

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多