Class and Record Helpers
来源:互联网 发布:淘宝网棉麻绣花女装 编辑:程序博客网 时间:2024/06/05 21:59
文章出處 : http://blog.leoshiang.com/?p=74
如果我想新增一個功能可以將 GUID 從串流中讀取,照以前的作法我會這樣設計:
使用方式如下:
這樣的作法,是另外定義一個 procedure 來處理。如果使用 Record Helper 的話可以更簡化:
新建一個類別 TUUID,用 record helper for TGUID 將它與 TGUID 的結合。使用方式如下:
有沒有發現差異在哪?使用 Record Helper 之後,新定義的 FromBytes Method 與原本的 TGUID 結合在一起,也就是說我們不修改原本的程式碼便能為原本的 TGUID 增加新的功能。
註 : Delphi XE3 開始支持......
Class and Record Helpers 是 Delphi 新增的語言特性,它是一種型別與其他類別(Class)或記錄(Record)結合,讓原來的類別可以使用新增的方法(Method)。聽起來有點難懂,我們用一個比較實際的例子來解釋。
Delphi 有一個內建的 Record TGUID,其定義如下:
TGUID = packed record D1: LongWord; D2: Word; D3: Word; D4: array[0..7] of Byte; class operator Equal(const Left, Right: TGUID): Boolean; class operator NotEqual(const Left, Right: TGUID): Boolean; class function Empty: TGUID; static; end;
如果我想新增一個功能可以將 GUID 從串流中讀取,照以前的作法我會這樣設計:
procedeure GUIDFromBytes( const Data: TBytes; const Index: Integer; var GUID: TGUID);begin Move(Bytes[Index], GUID, SizeOf(GUID));end;
使用方式如下:
var GUID: TGUID; Data: TBytes;begin GUIDFromBytes(Data, 0, GUID);end;
這樣的作法,是另外定義一個 procedure 來處理。如果使用 Record Helper 的話可以更簡化:
type TUUID = record helper for TGUID procedure FromBytes(Bytes: TBytes; I: Integer); end;?implementation?procedure TUUID.FromBytes(Bytes: TBytes; I: Integer);begin Move(Bytes[Index], GUID, SizeOf(GUID));end;
新建一個類別 TUUID,用 record helper for TGUID 將它與 TGUID 的結合。使用方式如下:
var GUID: TGUID; Data: TBytes;begin GUID.FromBytes(Data, 0);end;
有沒有發現差異在哪?使用 Record Helper 之後,新定義的 FromBytes Method 與原本的 TGUID 結合在一起,也就是說我們不修改原本的程式碼便能為原本的 TGUID 增加新的功能。
0 0
- Class and Record Helpers
- Active Record Validations Helpers
- qDebug("record:" record) and qDebug() << "record:" << record;
- hibernate domain class record
- define curser and record
- hibernate business logical class record
- Using SQLExec and Record Objects
- oracle record and table type
- Extracting Record and Field Metadata
- ccny:rostopic record and republish
- Class Helper/record helper 给类“打补丁”
- Recovery Principles--Redo record and change vector
- How to play and record sounds
- How to play and record sounds
- rails active record validation and callbacks
- Using Record Objects as Parameters and Returns
- RoR读书笔记 --- Active Record Validations and Callbacks
- oracle record and table 无需初始化
- 对C++中的外部变量和外部函数的认识
- HDU 2031 进制转换
- 从C开始_结构体_结构数组2(程序讨论)+清空输入行原理
- PDO的使用 - 未完待续
- C/C++语言文件操作之fgets
- Class and Record Helpers
- 如何面试程序员
- emacs 中使用git diff命令行
- html中的标签元素大体被分为三种不同的类型:块状元素、内联元素(又叫行内元素)和内联块状元素讲解
- NetBIOS网络编程
- 数据结构图论之普里姆算法
- Linux下通过修改fstab来自动挂载Windows 分区
- 郑州大学linux安装锐捷客户端
- Python模块学习——win32模块