Delphi - 新语法之Helper

技术交流,DH讲解.

哈哈,好久没有写这个系列了.今天在看VCL源代码的时候,看见了这个.
还是声明一下这个是在D7以后的版本才有的.谢谢,不要喷我!


当我们想给一个类增加一个方法或者成员变量,但是这个类又被很多单元引用了,我们直接去该这个类,肯定是很不明智的,怎么办?
对了,面向对象的话,我们可以继承一下不就OK了,的确可以.但是如果结构体呢?其实这个关键更像是为结构体准备的
不过我这里想说一个helper关键字的用法.
类助手 可以扩展一个类但是不用继承,而且在UML中是没有的.

简单的语法:
type
   助手类名 = class helper [(基类列表)] for 被扩展的类名
     成员变量列表
   end;

我们可以看到很简单,就是class helper.当然这里我得说一下了,record也是可以的.谁叫record的外号叫做小类.

我们对一个类可以定义多个助手类,但是扩展原类特定处代码的助手类只能有0个或者1个.


来个简单的例子吧.
Type
TMyClass= Class
Procedure MyProc;
Function MyFunc: Integer;
End;
.. .
Procedure TMyClass.MyProc;
Var
X: Integer;
Begin
X:= MyFunc;
End;
Function TMyClass.MyFunc: Integer;
Begin
.. .
End;
接下来就是它的助手类了.
Type
TMyClassHelper= Class Helper For TMyClass
Procedure HelloWorld;
Function MyFunc: Integer;
End;
.. .
Procedure TMyClassHelper.HelloWorld; //添加的新方法
Begin
Writeln(Self.ClassName);
End;
Function TMyClassHelper.MyFunc: Integer; //覆盖原方法
Begin
.. .
End;
使用:
Var
X: TMyClass;
Begin
X:= TMyClass.Create;
X.MyProc; // 调用TMyClass.MyProc
X.HelloWorld; // 调用 TMyClassHelper.HelloWorld
X.MyFunc; // 调用TMyClassHelper.MyFunc
End.
就是这么简单,希望大家能用到.

今天就讲到这里,我是DH;

posted @ 2009-12-08 22:15  HuangJacky  阅读(5626)  评论(8编辑  收藏  举报
AdminLogin