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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 抽象類與方法:實現安全性與程式碼重用Java抽象
- URL引數獲取/轉碼
- 程式碼質量第 2 層 - 可重用的程式碼
- JS實現JSON物件與URL引數的相互轉換JSON物件
- 小程式內引數和掃碼引數統一
- 影像壓縮編碼碼matlab實現——常用引數計算Matlab
- 重用其他程式庫
- 前端提交過來的引數轉碼前端
- 音樂格式轉換:java程式碼實現Java
- 利用雲函式來實現獲取特定路徑+引數的小程式碼函式
- 【機器學習】求解邏輯迴歸引數(三種方法程式碼實現)機器學習邏輯迴歸
- “低程式碼”是什麼?低程式碼平臺如何助力企業實現數字化轉型?
- SpringMVC實現引數校驗SpringMVC
- SpringBoot 引數別名實現Spring Boot
- python中用遞迴的方法實現斐波拉契數列Python遞迴
- FFmpeg程式碼實現視訊轉jpg圖片
- mybatis實現變數定義,實現sql業務程式碼MyBatis變數SQL
- fixtrue基礎之params引數實現簡單引數化
- LevelDB原始碼分析:理解Slice實現 - 高效的LevelDB引數物件原始碼物件
- jmeter如何實現引數自增JMeter
- js實現獲取URL引數JS
- python json格式轉url引數&分割, url引數轉json格式PythonJSON
- SAP ABAP Gateway Client 的 ABAP 實現,重用 HTTP ConnectionGatewayclientHTTP
- 詳解 Node.Js 中實現埠重用原理Node.js
- AI來實現程式碼轉換!Python轉Java,Java轉Go不在話下?AIPythonJavaGo
- FFmpeg命令影片音訊轉碼引數詳解音訊
- 工程座標轉換方法C#程式碼實現C#
- 低程式碼開發平臺開源:依靠科技力量實現數字化轉型!
- 如何實現引數級聯查詢
- Go實現啟動引數載入Go
- SpringMVC重定向傳引數的實現SpringMVC
- 利用微信臨時引數二維碼實現掃碼登入網站網站
- 數實融合!低程式碼推動工業數字化轉型走“深”向“實”
- 玩轉Golang的channel,二百行程式碼實現PubSub模式Golang行程模式
- python獲取命令列引數的程式碼Python命令列
- .NET神器:輕鬆實現數字轉大寫金額的秘籍與示例程式碼
- WPF中的命令模式:打造清晰、可重用的程式碼利器模式
- C技巧:結構體引數轉成不定引數結構體
- Spring Boot 引數轉換Spring Boot