首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果子类为TForm,该如何继承?

如果子类为TForm,该如何继承?
EN

Stack Overflow用户
提问于 2009-07-14 08:40:31
回答 2查看 423关注 0票数 3

我承认这是我第一次使用继承,所以我可能选择了错误的方式,这就是为什么我在这里问你。

我在我的delphi应用程序中编写了一个消息处理程序来捕获来自WSAAsyncSelect()的消息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
procedure FormMain.MessageHandler(var Msg:Tmessage);
begin
  case WSAGetSelectEvent(MSG.LParam) of
    FD_READ: //OnSocketRead(MSG.WParam);
    FD_CLOSE: //OnSocketClose(MSG.WParam);
  end;
end;

问题是OnSockerRead和OnSocketClose是另一个类中的函数。

我希望在类之间建立良好的关系,这样具有这两个函数的类可以访问它的父类,但同时这些东西对其他类是私有的。

请给我一个例子,我应该怎么做,因为我不知道是抽象的还是继承的更好,因为我从来没有用过这两个东西。我想让我的代码更面向对象。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-14 09:24:22

您可以做的一件事是使用接口来访问主窗体功能。例如,假设您想从子窗体中调用主窗体上的SocketRead或SocketClose。您可以只在单元的实现中使用mainform,但我尽量避免这种类型的循环引用。另一种选择是创建一个包含共享接口的新单元,并由主窗体和子单元使用它。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
unit MainFormShared;
interface
type
  IMainFormShared = interface
    ['{A2C624D5-DDCF-49D6-8B03-791BA0B79A42}']
    procedure SocketRead(var Handle : Integer);
    procedure SocketClose(Var Handle : Integer);
  end;
implementation
end.

您的主窗体将实现此接口(可以将实现保持为私有):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type
  tMainForm = class(TForm,IMainFormShared)
  :
  private
    procedure SocketRead(var Handle : Integer);
    procedure SocketClose(Var Handle : Integer);
  end;

在继承链中的父对象中,您可以像这样实现消息处理程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
procedure TParentForm.MessageHandler(var Msg:Tmessage);
var
  fMainFormShared : IMainFormShared;
begin
  case WSAGetSelectEvent(MSG.LParam) of
    FD_READ: 
      if Supports(Application.MainForm, IMainFormShared,fMainFormShared) then  
        fMainFormShared.SocketRead(Msg.WParam);
    FD_CLOSE: //OnSocketClose(MSG.WParam);
      if Supports(Application.MainForm, IMainFormShared,fMainFormShared) then  
        fMainFormShared.SocketClose(Msg.WParam);
  end;
end;
票数 7
EN

Stack Overflow用户

发布于 2009-07-14 08:51:58

我不认为继承是这里的答案,除非OtherClass可以从MainForm派生,但这看起来令人怀疑。

开放访问的一种方法是将两个类放在同一个单元中。这让他们可以即时访问彼此的实现细节。

但也许你正在努力尝试,如果OtherClass在它自己的(小)单元中,其他人都没有使用,那么将这些函数公开并不是那么糟糕。

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

https://stackoverflow.com/questions/1126609

复制
相关文章
如果没有 IDE,该如何 Debug?
写代码时噼里啪啦,一顿操作猛如虎,一运行,发现不是 error 就是 exception,这是程序员经常遇到的场景,解决它就需要一步步去排错,排错的这个过程叫做 Debug。
somenzz
2021/11/19
4070
如果没有 IDE,该如何 Debug?
golang继承——接口父类子类
从面向对象的角度上看,总会有一些使用子类不想做,希望父类去做的事情,在java这样的纯面向对象的语言中,方法就是使用父类和子类,子类通过继承父类的方法,实现子类自己的属性,如果没有某个方法没有经过子类重写,那么这个方法通过子类调用时,就会调用父类的方法。
Java架构师必看
2021/05/14
4.7K0
Python|继承,多态,鸭子类型
01 继承 编写一个类 class Animal(object): def shout(self): print('Animal is shouting...') 继承Animal的Dog: class Dog(Animal): def shout(self): print('Dog is shouting...') 继承Animal的Cat: class Cat(Animal): pass 02 多继承(MixIn设计原则) Java和C#等
double
2018/04/02
8370
java中子类的继承性
子类的成员中有一部分是子类自己申明定义的,另一部分是从他的父类继承的。子类继承父类的成员变量作为自己的一个成员变量,就好像他们是在子类中直接
Hongten
2018/09/13
6950
Hadoop中如何正确编写继承自Writable接口的子类
Hadoop中可以编写自己的类,用作hadoop job的key或者value类型,自己编写的类要实现接口Writable。
星哥玩云
2022/07/03
7960
Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
FatherA.__init__(self) # 在子类中调用父类的方法:父类名.方法名称(参数)
授客
2019/09/11
3.2K0
如果使用 JavaScript 原型实现继承
在这篇文章中,我们将讨论原型以及如何在 JS 中使用它们进行继承。我们还将会看到原型方法与基于类的继承有何不同。
前端小智@大迁世界
2020/05/12
6980
如果使用 JavaScript 原型实现继承
关于子类在继承父类属性和方法的基础上如何增加子类的属性和方法
如何用python程序实现子类在继承父类属性和方法的基础上同时增加子类自己的属性和方法?
算法与编程之美
2023/08/22
1900
关于子类在继承父类属性和方法的基础上如何增加子类的属性和方法
Spring复杂的BeanFactory继承体系该如何理解? ----上
Spring提供了两种容器类型:BeanFactory和ApplicationContext。
大忽悠爱学习
2022/05/10
1.9K0
Spring复杂的BeanFactory继承体系该如何理解? ----上
Spring复杂的BeanFactory继承体系该如何理解?---中下
作为Spring提供的较之BeanFactory更为先进的IoC容器实现,ApplicationContext除了拥有BeanFactory支持的所有功能之外,还进一步扩展了基本容器的功能,包括BeanFactoryPostProcessor、BeanPostProcessor以及其他特殊类型bean的自动识别、容器启动后bean实例的自动初始化、国际化的信息支持、容器内事件发布等。真是“青出于蓝而胜于蓝”啊!
大忽悠爱学习
2022/05/10
3910
Spring复杂的BeanFactory继承体系该如何理解?---中下
Spring复杂的BeanFactory继承体系该如何理解?---下
全世界有很多不同的国家和地区,每个国家或者地区都使用各自的语言文字。在当今全球化的信息大潮中,要让我们的应用程序可以供全世界不同国家和地区的人们使用,应用程序就必须支持它所面向的国家和地区的语言文字,为不同的国家和地区的用户提供他们各自的语言文字信息。所以,要向全世界推广,应用程序的国际化信息支持自然是势在必行。
大忽悠爱学习
2022/05/10
2500
Spring复杂的BeanFactory继承体系该如何理解?---下
Spring复杂的BeanFactory继承体系该如何理解? ----中
本系列重点不在于对源码的讲解,而在于让大家认识到spring为什么这样设计,重在思想的传递
大忽悠爱学习
2022/05/10
3230
Spring复杂的BeanFactory继承体系该如何理解? ----中
20 - 如果列表元素是对象,该如何进行排序
1. 如果列表元素是对象,对这样的列表排序有哪些方法 ? class MyClass: def __init__(self): self.value = 0 ''' def __gt__(self, other): return self.value > other.value ''' def __lt__(self, other): return self.value > other.v
ruochen
2021/05/23
1.1K0
20 - 如果列表元素是对象,该如何进行排序
如果MySQL的 InnoDB 文件的损坏,该如何手动恢复?
我们都知道MySQL 的复制技术,通过主从同步可以实现读写分离,热备份,让服务器更加高可用。MySQL 的复制主要是通过 Binlog 来完成的,Binlog 记录了数据库更新的事件,从库 I/O 线程会向主库发送 Binlog 更新的请求,同时主库二进制转储线程会发送 Binlog 给从库作为中继日志进行保存,然后从库会通过中继日志重放,完成数据库的同步更新
码农架构
2020/10/26
5K0
如果MySQL的 InnoDB 文件的损坏,该如何手动恢复?
【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )
0 . 类继承格式 : 使用 " : " 继承父类 ; 如果该父类有主构造函数 , 那么子类必须至少有一个主构造函数或次构造函数 , 子类的构造函数下面会根据不同情况详细解析 ;
韩曙亮
2023/03/27
1.3K0
【Kotlin】Kotlin 类的继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )
子类继承父类,父类的初始化
含有自变量的构建器 上述例子有自己默认的构建器;也就是说,它们不含任何自变量。编译器可以很容易地调用它们,因为不存 在具体传递什么自变量的问题。如果类没有默认的自变量,或者想调用含有一个自变量的某个基础类构建 器,必须明确地编写对基础类的调用代码。这是用 super 关键字以及适当的自变量列表实现的,如下所示:
秋白
2019/02/21
1.9K0
python的子类继承父类构造函数说明
如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。
狼啸风云
2019/09/18
2.8K0
【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )
类型兼容性原则 : C++ 的 " 类型兼容性原则 “ 又称为 ” 赋值兼容性原则 " ;
韩曙亮
2023/10/23
3230
【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )
【C++】继承 ② ( 继承语法 | 三种继承 - 共有继承 / 保护继承 / 私有继承 | 继承与父类私有成员 | 子类访问父类私有成员 | 代码示例 )
继承语法 : 使用 class 关键字 定义 子类 , 在 子类后面 使用 冒号 : 与 若干父类隔开 ;
韩曙亮
2023/10/15
1K0
【C++】继承 ② ( 继承语法 | 三种继承 - 共有继承 / 保护继承 / 私有继承 | 继承与父类私有成员 | 子类访问父类私有成员 | 代码示例 )
点击加载更多

相似问题

子类继承父常量吗?如果继承,如何访问它们?

63

如果case类继承被禁止,该如何表示?

10

如果该值为

14

继承如何影响子类

16

如何将父类转换(继承)为子类?

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文