BCB中用Sender引數實現程式碼重用 (轉)
面向的工具的特點之一就是要提高程式碼重用性(Reuse),寶蘭的BCB當然可以實現這一功能。我們都知道,在BCB中,大部分程式碼都直接或間接的對應著一個事件,此程式稱為事件處理控制程式碼,它實際上就是一個過程。從應用程式的工程到視窗、和程式,BCB強調的是其開發過程中每一層次的重用性,可以充分利用已編寫過的程式碼來減少工作量,更會使你的程式變得優美。程式碼段間的共享都跟發生該事件的有關有關,需要根據控制元件型別做出相應的處理,這時就要用到Sender引數。
每個的開頭都有形如:
void _fastcall Tform1::Button1Click(T *Sender)
其中的Sender是一個Tobject型別的引數,它告訴BCB哪個控制元件接收到這個事件並相應的處理過程。我們可以編寫一個單一的事件處理控制程式碼,透過Sender引數和if語句或者case語句配合,來處理多個元件。在中可以用IS來測試Sender型別,或者用AS進行型別轉換,BCB我們只在用dynamic_cast來進行上面兩個工作,下面把dynamic_cast的用法說明一下。
dynamic_cast 可以把某種物件強制轉成另一個類,型別轉換成功則返回一個值是0的指標,失敗則丟出一個異常處理資訊:Bad_cast,但你放心不會導致當機,所以可以放心使用。其程式:
dynamic_cast
T引數一定要是一個指標、void 、或是已經定義過的類,而ptr引數則必須是一個指標(pointer) 或是一個引用(reference)。如果T的型別是void,那麼ptr則是一個可以訪問最下面類裡的任何成員,當然這樣的類將不可以是基礎類。
1.進行判斷
我們用dynamic_case來測試Sender,以便找到呼叫這個事件的處理控制程式碼或元件的型別。如,並視窗編輯框和標籤的Click事件的處理控制程式碼都指向視窗的xxx函式,編輯框和標籤對Click事件有不同的反應:
void _fastcall TForm1::xxx(Tobject *Sender)
{
if(dynamic_cast
showmessage(“This is a editbox”);
if(dynamic_cast
showmessage(“This is a label”);
}
2.強制進行型別轉換
將若干繼承同一父類的子類強制轉換成該父類。如視窗中有一個TEdit類控制元件和一個TMemo控制元件,它們實際上都繼承於TCustomEdit類,如果你要為二者的某一事件提供同樣的處理,可以將二者事件控制程式碼都指向自定義的函式yyy:
void _fastcall TForm1::yyy(Tobject *Sender)
{
dynamic_cast
}
在這裡,先把TEdit類和TMemo類均強制轉換成TCustomEdit類,再對其父類的屬性進行賦值。
使用Sender引數可以透過單一函式段處理多類元件,真正體現了BCB的物件導向的重用性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958782/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BCB中用Sender實現程式碼重用(糾正篇) (轉)
- BCB高手進階 (十)用Sender引數實現程式碼重用 (轉)
- BCB中實現動態建立元件 (轉)元件
- Java 抽象類與方法:實現安全性與程式碼重用Java抽象
- C#程式碼實現對HTTP POST引數進行排序C#HTTP排序
- 在BCB中使用向量實現控制元件陣列 (轉)控制元件陣列
- 提高Java程式碼可重用性的三個措施 (轉)Java
- 在VB中用API實現多媒體 (轉)API
- 【機器學習】求解邏輯迴歸引數(三種方法程式碼實現)機器學習邏輯迴歸
- javascript將引數轉換為數值程式碼詳解JavaScript
- BCB:TEdit控制元件右對齊的簡單實現 (轉)控制元件
- 使用BCB製作控制面版程式 (轉)
- Effective BCB Form Program(1) ——窗體事件驅動鏈引發程式錯誤分析 (轉)ORM事件
- Effective BCB Form Program(2) ——窗體事件驅動鏈引發程式錯誤分析 (轉)ORM事件
- 利用OnHelp( )在BCB中實現上下文敏感的html help (轉)HTML
- 在PHP中用協同程式實現合作多工PHP
- 小程式內引數和掃碼引數統一
- 程式碼質量第 2 層 - 可重用的程式碼
- 從模板中分離出引數無關的程式碼(轉)
- 在 BCB5 中實現永久刪除資料表記錄 (轉)
- 利用雲函式來實現獲取特定路徑+引數的小程式碼函式
- mybatis實現變數定義,實現sql業務程式碼MyBatis變數SQL
- 影像壓縮編碼碼matlab實現——常用引數計算Matlab
- 用BCB編寫身份證號識別程式 (轉)
- Javascript中的Trait與程式碼重用JavaScriptAI
- 簡單實現[BCB5]:鍵盤全域性鉤子[Hook],監視多程式鍵盤操作。 (轉)Hook
- JS實現JSON物件與URL引數的相互轉換JSON物件
- python中用遞迴的方法實現斐波拉契數列Python遞迴
- fixtrue基礎之params引數實現簡單引數化
- 在Delphi 中用程式實現自定義窗體的建立和顯示順序(2) (轉)
- js實現獲取URL引數JS
- C可變引數的實現
- SpringMVC實現引數校驗SpringMVC
- 重用其他程式庫
- 前端提交過來的引數轉碼前端
- LevelDB原始碼分析:理解Slice實現 - 高效的LevelDB引數物件原始碼物件
- Ruby Ruport實踐—報表引數實現
- “低程式碼”是什麼?低程式碼平臺如何助力企業實現數字化轉型?