谈谈Delph中的类和对象2---类可以理解成一种特殊的数据结构、类型转换
三、类可以理解成一种特殊的数据结构
我们知道数据类型可以进行强制类型转换,类既然可以理解成一种数据类型,那么它也应该可以进行类型转换。比如下面代码为一个按钮(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上。
谈谈Delph中的类和对象2---类可以理解成一种特殊的数据结构、类型转换的更多相关文章
- c++中的类的对象与类的指针
以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
- 谈谈javascript中的日期Date对象
一.日期对象 在javascript中并没有日期型的数据类型,但是提供了一个日期对象可以操作日期和时间. 日期对象的创建: new Date();二.将日期对象转换为字符串 将日期对象转换为字 ...
- 【学习笔记】【oc】类和对象及类的三大基本特征
1.类和对象 类是抽象化,对象是具体化. (1)定义类: 分为两个步骤,类的声明:定义类的成员变量和方法:@interface 用于声明定义类的接口部分,@end表面定义结束:. 成员变量的定义:{} ...
- python的类和对象(类的静态字段)
转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...
- 0604-面向对象、类与对象、类、static、构造方法/析构方法
一.面向对象 1.面向过程:一个人分步骤完成某个事情 2.面向对象:某件事情拆分为多个任务,由每个对象独立完成,最后调用整合为一个完整的项目 3.三要素:继承.封装.多态. 封装:私有化属性 提供公共 ...
- C#类,对象,类成员简介
本节内容 1.类(class)是现实世界事物的模型 2.类与对象的关系,什么时候叫“对象”什么时候叫“实例” 3.引用变量与实例的关系 4.类的三大成员: ①属性(Property): ②方法(Met ...
- C++类的对象和类的指针的区别
#include <iostream> #include <string> using namespace std; class Student { public: stati ...
- php函数、类和对象以及类的封装、继承、类的静态方法、静态属性
1.函数 php内置函数可以直接使用,如果没有安装php扩展即可 自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数 ...
随机推荐
- Pairing heap
其实挺好写的...(大雾) 理性愉悦大法好... #include<cstdio> #include<algorithm> namespace utils{ template& ...
- 【leetcode】Populating Next Right Pointers in Each Node
Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeLinkNode * ...
- Jenkins安装部署
官方文档:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions#Install ...
- 如何让您的php也支持pthreads多线程
我们常常会碰到这样一种情况,开发环境在windows下开发,而生产环境确是linux.windows下能正常运行,上传到linux后却无法好好地玩耍了.然后开始了一轮尼玛式的疯狂的查找原因,最后发现是 ...
- gtk+-3.21.4 static build step in windows XP
In recent days the weather is very hot Unable to sleep properly Under the state of daze research gtk ...
- android学习————项目导入常见错误整理(转载)
详细请访问http://4789781.blog.51cto.com/4779781/1031107
- Google推荐的图片加载库Glide介绍
英文原文 Introduction to Glide, Image Loader Library for Android, recommended by Google 译文首发 http://jco ...
- Android Volley入门到精通:初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- HDU 5879 Cure -2016 ICPC 青岛赛区网络赛
题目链接 题意:给定一个数n,求1到n中的每一项的平方分之一的累加和. 题解:题目没有给数据范围,而实际上n很大很大超过long long.因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固 ...
- 在Win7下使用sphinx-build建立开源软件文档
最近想看看odoo的使用文档,在线看不方便,而且还没有提供离线文档下载,由于是开源项目,此项目托管在Github上,于是就有了想通过Github把文档git下来,可是git下来的文档是.rst文件,无 ...