【问题标题】:Inheritance in FreePascal LazarusFreePascal Lazarus 中的继承
【发布时间】:2014-09-15 16:12:15
【问题描述】:

我正在使用 Lazarus IDE 学习 free pascal,但我不知道如何以派生形式继承方法。

我想要这样的东西:

形成基类或父类:

procedure HelloWorld;
begin
 ShowMessage('Hello World from base form or father');
end;

和形式派生或子:

procedure HelloWorld;
begin
  inherited;
  ShowMessage('Hello World from derived form or child');
end;

我希望结果通过单击(例如 Button1)显示 2 条消息

谢谢!!!

【问题讨论】:

    标签: pascal lazarus freepascal


    【解决方案1】:

    为了更好地了解 Object Pascal 语言,我认为您应该从阅读 freepascal 参考指南开始。 FreePascal 是 lazarus 下的底层编译器。

    了解表单、标签、按钮等是对象、实例、类等概念的具体化身很重要。

    在这方面,类是绑定代码和数据的结构。你想要实现的是这样的:

    Type
    TMyClass = Class(<ancestorclass>)
    <fields and methods>
    End;
    
    TMyChildClass = Class(TMyClass)
    <fields and methods>
    End;
    

    这意味着 TMyChildClass 是一个从 TMyClass 派生的类。如果您在两个类中都有同名的方法,您可以使用关键字“override”向编译器显示该方法已被子类覆盖,如下所示:

    TMyClass = Class /* No parenthesis or ancestor name means the class derives from TObject */
    Procedure ParentMethod;
    End;
    
    TMyChildClass = Class(TMyClass)
    Procedure ParentMethod; Override;
    End;
    
    Procedure TMyClass.ParentMethod;
    Begin
     DoSomething;
    End;
    
    Procedure TMyChildClass.ParentMethod; /* Dont repeat the override */
    Begin
     Inherited; // This will call the parents method
    End;
    

    这是在对象 pascal 中进行方法覆盖的正确方法。如果您要使用“inherited”的类的定义没有括号并且祖先类的名称,那么 then 和inherited 之间没有祖先关系将不会做您期望做的事情。

    【讨论】:

      【解决方案2】:

      在 Pascal 中,procedure 不是面向对象的编程结构。

      FreePascal 包括objects,对象可以包括过程:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多