首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreePascal Lazarus中的继承

FreePascal Lazarus中的继承
EN

Stack Overflow用户
提问于 2014-09-16 00:12:15
回答 2查看 1.3K关注 0票数 1

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

我想要这样的东西:

Form base or father:

代码语言:javascript
复制
procedure HelloWorld;
begin
 ShowMessage('Hello World from base form or father');
end;

和form派生或子级:

代码语言:javascript
复制
procedure HelloWorld;
begin
  inherited;
  ShowMessage('Hello World from derived form or child');
end;

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

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-02-20 04:47:15

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

理解表单、标签、按钮等是对象、实例、类等概念的具体体现,这一点很重要。

在这一点上,类是绑定代码和数据的结构。您想要实现的内容如下:

代码语言:javascript
复制
Type
TMyClass = Class(<ancestorclass>)
<fields and methods>
End;

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

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

代码语言:javascript
复制
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;

这是在object pascal中进行方法重写的正确方法。如果你想要使用“继承”的类的定义中没有括号和祖先类的名字,那么两者之间就没有祖先关系,继承就不会做你期望做的事情。

票数 3
EN

Stack Overflow用户

发布于 2014-09-16 00:21:10

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25852375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档