BCB高手進階 (十)用Sender引數實現程式碼重用 (轉)
BCB高手進階
(十)用Sender引數實現程式碼重用
to:nxyc_twz@163.com">nxyc_twz@163.com
面向的工具的特點之一就是要提高程式碼重用性(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-982759/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java實現BCD編碼與十進位制轉換Java
- pytest 引數化進階
- Linux-高手進階之路Linux
- Java 抽象類與方法:實現安全性與程式碼重用Java抽象
- 科學計數法字串轉為對應的十進位制程式-C程式碼字串C程式
- 十進位制轉換任意進位制--鏈棧實現
- 攻防世界web高手進階之blgdelWeb
- xctf-web(高手進階區)-supersqliWebSQL
- 攻防世界web高手進階18(mfw)Web
- 十幾行Python程式碼輕鬆實現txt轉xls,方便快捷Python
- DllImport進階:引數配置與高階主題探究Import
- vue + axios 實現分頁引數傳遞,高階搜尋功能實現VueiOS
- 藍橋杯-基礎練習-十進位制轉十六進位制(Python實現)AC程式碼,註釋,適合新手~PythonC程式
- URL引數獲取/轉碼
- TypeScript 引數簡化實戰(進階知識點conditional types,中高階必會)TypeScript
- 程式碼質量第 2 層 - 可重用的程式碼
- 程式碼高手的過節秘籍:CodeArt Snap幫寫程式碼,靈感彈指間實現
- 運用sklearn進行主成分分析(PCA)程式碼實現PCA
- Android高手進階之兩幅圖搞定DilogFragmentAndroidFragment
- 進位制數轉換方法(八/十六/十)
- JS實現JSON物件與URL引數的相互轉換JSON物件
- Python技法2:函式引數的進階用法Python函式
- 介面測試--獲取動態引數進階
- 遞迴函式實現十進位制正整數轉換為二進位制,八進位制,十六進位制遞迴函式
- 小程式開發進階:如何實現直播連麥
- JVM實用引數系列JVM
- 小程式內引數和掃碼引數統一
- Go語言實現十進位制轉換成二、八、十六進位制Go
- 運用sklearn進行線性判別分析(LDA)程式碼實現LDA
- 影像壓縮編碼碼matlab實現——常用引數計算Matlab
- 重用其他程式庫
- 攻防世界 web高手進階區 10分題 urlWeb
- 攻防世界 Reverse高手進階區 2分題 Mysterious
- stoi字串轉十進位制數越界問題字串
- 羅馬數字轉換成十進位制
- 前端提交過來的引數轉碼前端
- vue高階進階系列——用typescript玩轉vue和vuexVueTypeScript
- pytest封神之路第五步 引數化進階
- Spring Validation-用註解代替程式碼引數校驗Spring