博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈Delph中的类和对象2---类可以理解成一种特殊的数据结构、类型转换
阅读量:4987 次
发布时间:2019-06-12

本文共 1314 字,大约阅读时间需要 4 分钟。

三、类可以理解成一种特殊的数据结构

  我们知道数据类型可以进行强制类型转换,类既然可以理解成一种数据类型,那么它也应该可以进行类型转换。比如下面代码为一个按钮(Button1)的单击事件

procedure TForm1.Button1Click(Sender: TObject);var    ACaption: String;begin    ACaption:= TButton(Sender).Caption;    //Sender从TObject转化为TButton    ShowMessage(Format('You clicked "%s"!',[ACaption]));end;

  在这段代码中,Sender是一个TObject型对象,我们把它强制转化为TButton类型,注意进项强制类型转换的格式:TButton(Sender);

  如果你看得不清楚,可以参照一下我们通常的数据类型的转化

procedure TForm1.Button1Click(Sender: TObject);var    S_Str: String;    P_Str: PChar;begin    S_Str:= 'I love China';    P_Str:= PChar(S_Str);    S_Str:= '';    S_Str:= String(P_Str);;    ShowMessage(S_Str);end;

  但是在面向对象的程序设计过程中,强调的是安全性,比如上面的将TObject类型的Sender强制转换成TButton存在着不安全性。

  如下面的代码依然是写Button1.OnClick事件

procedure TForm1.Button1Click(Sender: TObject);begin    TCanvas(Sender).Brush.Color:= clRed;end;

  执行一下就会出错,这样岂不是违背了面向对象的程序设计的宗旨了吗?没有!既然是类,就应该有类特定的类强制转换方法,更改上面的代码如下

procedure TForm1.Button1Click(Sender: TObject);begin    (Sender as TCanvas).Brush.Color:= clRed;end;

  使用as来转化,as 就可以把错误抓住,不会影响程序的正常运行

 

  如下面的操作:在一个窗体上放一个Edit和十个Button,把Button.Caption分别设置为'0'、'1'、……'9',然后写下一个按钮的OnClick事件如下

procedure TForm1.Button1Click(sender: TObject);begin    Edit1.Text:= Edit1.Text+(Sender as TButton).Caption;end;

  就可以把别的Button的OnClick事件关联到Button1Click上。

 

转载于:https://www.cnblogs.com/xumenger/p/4437645.html

你可能感兴趣的文章
HTML5小游戏【是男人就下一百层】UI美化版
查看>>
SSH免密登陆
查看>>
java根据图片和文字生成自定义图片
查看>>
《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
查看>>
我要回家-割舍不断的亲情
查看>>
Catenyms (POJ2337) 字典序最小欧拉路
查看>>
ZT : 优秀程序员的两大要素:懒 + 笨
查看>>
Centos6.5-dnsmasq安装
查看>>
PyCharm+Eclipse共用Anaconda的数据科学环境
查看>>
笔记3 | 通过onWindowAttributesChanged和onSystemUiVisibilityChange监听状态栏页面的隐藏与显示、动态显示与隐藏状态栏...
查看>>
msysgit 上传文件夹,规范化的日常
查看>>
CSS清除浮动
查看>>
Zookeeper之ZKClient的使用
查看>>
WTF小程序之animation
查看>>
那些前端二进制操作API
查看>>
一 、Spring Boot 学习之项目搭建
查看>>
一键部署joomla开源内容管理平台
查看>>
opencv画图
查看>>
Python-爬虫-12306购票业务实现
查看>>
010. windows10下安装kivy 1.9.1版
查看>>