谈谈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){ //支出默认参数 ...
随机推荐
- PHP中面相对象对象的知识点整理
面向对象 万物皆对象,将构成问题的事务分解到各个对象上,建立对象的目的不是为了完成一个工作,而是为了描述某个事务在解决问题中的行为,更符合人的思维习惯,代码重用性高,可扩展性. ___________ ...
- 如何安装PANABIT?
PANABIT可以帮你轻松的封杀360WIFI.二级路由和移动设备,还可以让员工在上班期间禁止浏览与工作无关的网站,禁止看视频,禁止聊QQ,禁止网购......总之一切你能想到的,它都能帮你实现. P ...
- 百度地图API 海量点 自定义添加信息
<!--添加百度地图--> <script type="text/javascript" src="http://api.map.baidu.com/a ...
- ubuntu下文件内容查找命令
Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名 例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件 ...
- C#时间转整型(时间戳),模仿php strtotime函数的部分功能
今天需要将一个基于MS SQL数据库的新闻系统数据导入phpcms v9,源系统新闻日期格式为"2014-01-15 10:45:49",而phpcms中使用的是整型时间戳,在ph ...
- 【微服务】SpringBoot、SpringCloud相关
深入学习微框架:Spring Boot: http://www.infoq.com/cn/articles/microframeworks1-spring-boot/ Spring Boot--2 ...
- Flatten 2D Vector
Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
- IPC----消息队列
消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识.具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息.在某个进程 ...
- sharepoint2010匿名访问
怎样在SharePoint 2010网站中启用匿名访问 SharePoint 2010的改动比较大,尤其是相对SharePoint Portal Server 2003来说.本文介绍在SharePoi ...
- 用普通用户通过sudo进行启动tomcat时报如下异常
用普通用户通过sudo进行启动tomcat时报如下异常 tomcat user 不在 sudoers 文件中.此事将被报告. 这是由于sudo命令使用root用户执行命令.而处于安全性的考虑,一般不允 ...