zoukankan      html  css  js  c++  java
  • 谈谈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上。

  • 相关阅读:
    redmine工作流程总结
    IOS_OC_Category
    权限问题导致无法删除ftp文件
    Window下UDP(socket)接和收数据案例
    新一批创业者入局 谁来挖掘其身上的金矿
    java代理使用 apache ant实现文件压缩/解压缩
    ZOJ Monthly, November 2012
    【cocos2d-x 3.7 飞机大战】 决战南海I (十) 游戏主场景
    getAttribute for IE7
    Sahara中的数据模型
  • 原文地址:https://www.cnblogs.com/xumenger/p/4437645.html
Copyright © 2011-2022 走看看