a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > Delphi > 正文

將面向?qū)ο蟮乃枷胴灤┦冀K--談Delphi開(kāi)發(fā)(第一篇)

2019-11-18 18:53:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
    國(guó)內(nèi)有許多人將Delphi作為首選的開(kāi)發(fā)工具。其原因當(dāng)然是因?yàn)镈elphi給開(kāi)發(fā)者提供了諸多特性:面向?qū)ο蟮拈_(kāi)發(fā),可視化界面設(shè)計(jì),組件豐富,多平臺(tái)的可移植性(Delphi6的新特性)。  

      可是對(duì)于初學(xué)者來(lái)說(shuō),面向?qū)ο蟮乃枷肟赡懿⒉皇荄elphi給其帶來(lái)的最大的感受。而可視化的界面設(shè)計(jì),豐富多樣的可用組件反而給其留下最深刻難忘的印象。由此帶來(lái)的嚴(yán)重的后果是,初學(xué)者往往在很長(zhǎng)一段時(shí)間里,只將注意力集中在Delphi提供的現(xiàn)有的VCL組件的使用上,而忽視去思考面向?qū)ο蟮乃枷雽?duì)于Delphi的整個(gè)組件構(gòu)架體系所蘊(yùn)含的意義。

     下面的一段代碼,包含了一個(gè)最常見(jiàn)的,也是初學(xué)者最易犯的一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤雖然不是語(yǔ)法錯(cuò)誤,但是卻顯露出使用者的面向?qū)ο蟮乃枷脒€有待加強(qiáng):

var
  Form1: TForm1;

implementation

{$R *.dfm}

PRocedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(Form1.Caption); // <-- 這里的Form1的使用就有些問(wèn)題。
end;

這樣的代碼,粗看看好像沒(méi)有什么錯(cuò)。但是,這里Form1的出現(xiàn)就有些說(shuō)不過(guò)去了。明明這里的代碼,寫(xiě)的是TForm1的ButtonClick方法的實(shí)現(xiàn),而Form1作為T(mén)Form1類(lèi)的一個(gè)實(shí)例,居然被寫(xiě)死到類(lèi)的實(shí)現(xiàn)中,難道不是有些概念混亂嗎?要改成符合面向?qū)ο笏枷氲模埠芎?jiǎn)單,可以有兩種寫(xiě)法:

 1. ShowMessage(Self.Caption); // <-- 這種寫(xiě)法非常明確,即將要Show的信息是類(lèi)的當(dāng)前實(shí)例的Caption

 2. ShowMessage(Caption); // <-- 這里的寫(xiě)法和上述的雷同,省略了關(guān)鍵字Self;

    面向?qū)ο笏枷氲娜蠛诵膬?nèi)容是封裝,繼承,多態(tài)。而上述例子暴露的問(wèn)題就是封裝的問(wèn)題。類(lèi)似的例子還有:

    var

       Form1: TForm1;

      ......

     var

       Form2: TForm2;

    procedure TForm1.Button1Click(Sender: TObject);

    begin

       Form2.Show;  // <-- 作為一個(gè)全局的變量,F(xiàn)orm2在這里的使用同樣讓人覺(jué)得混亂。

    end;

    上述的例子,可能更具有普遍性吧,對(duì)于大多數(shù)情況,在一個(gè)工程中,TForm1,和TForm2只可能各只有一個(gè)實(shí)例,所以這樣的代碼也算馬馬虎虎通過(guò)。但是從嚴(yán)格意義上來(lái)說(shuō),也是不符合封裝性的要求。參照如下代碼:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FNext: TForm;
  public
    { Public declarations }
    property NextForm: TForm read FNext write FNext;
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Assigned(FNext) then
    TForm2(FNext).Show;
end;

end.

// 以下是工程文件中的內(nèi)容:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);

  Form1.NextForm := Form2; // <-- 增加這么一句,勉強(qiáng)讓代碼符合封裝的要求了

  Application.Run;
end.

將Form2指針,作為Form1的一個(gè)屬性,傳遞給Form1,這樣,F(xiàn)orm1在調(diào)用的時(shí)候,才遵守了封裝性的原則!當(dāng)然,這些代碼僅僅是為了體現(xiàn)封裝的思想,而在實(shí)際中,可以依個(gè)人的習(xí)慣來(lái)決定是否真的要實(shí)現(xiàn)的這么徹底。但是這種思想,應(yīng)當(dāng)在腦子里扎根......(未完,待續(xù))。

      更多文章


上一篇:將面向?qū)ο蟮乃枷胴灤┦冀K--談Delphi開(kāi)發(fā)(第二篇)

下一篇:VC與Delphi之間動(dòng)態(tài)鏈接庫(kù)互相調(diào)用

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門(mén)圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 国产精品一区二区三区在线 | 国产探花在线精品一区二区 | 日韩一| 99视频久久 | 久久三区 | 午夜一本 | 91精品自产拍老师在线观看 | 3bmm在线观看视频免费 | 黄色毛片在线观看 | 亚洲一区二区日韩 | 国产99久久精品一区二区永久免费 | 91干在线观看 | 国产精品国产精品国产专区不卡 | 久久毛片 | 国产美女一区二区 | 99爱免费观看 | 欧美日韩在线精品 | 中文字幕在线三区 | 日韩精品影院 | 99视频精品| 黄色网在线播放 | 久久精品影视 | 人妖 丝袜 另类 亚洲 | 久久精品日产高清版的功能介绍 | 成人一区二区电影 | 国产精品美女一区二区三区四区 | 干干射 | 中文字幕日韩在线 | 国产一级在线 | 欧美日韩电影一区二区三区 | 香蕉av777xxx色综合一区 | 黄色一级片视频播放 | 亚洲高清av | 国产精品第一国产精品 | 色吊丝在线永久观看最新版本 | 99re6在线视频精品免费 | 国产一级片| 毛片免费在线 | 午夜逼逼 | 亚洲精品在线播放 | 成人婷婷 |