一、delphi语言中的Helper
在 Delphi2007 以后,引入了 Helper关键字,当时没有太在意,现在,在学 Objective-C,开发Iphone软件的是,Objective-C ,里面有一个 类别的概率--CateGory。 感觉和Delphi里面的 Helper 很类似。就回过头来,复习了一下。 (可以参考DelphiXe中的 Helper帮助: ms-help://embarcadero.rs_xe/rad/Class_and_Record_Helpers.html)
在DelphiXE写了一个 Demo,先看代码。
unit Unit1;function MyFunction3: string;
// property MyValue :String read FValue write FValue;
Frm 窗体代码:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 341
ClientWidth = 659
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 248
Top = 96
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
通过上面的代码,可以总结一下:
1、定义
Type
TXXX = class / record helper for T... {T... 表示已存在的类}
{可以替换已存在的方法}
{也可以有新成员的方法}
end;
//这之后再使用 T... 类及其子孙类时, 都会优先使用 Txxx 的修改。
2、TXXX 类 不能有 构造函数和 析构函数,就是 Constructor 和 Destroy。
3、TXXX类,里面的Self,指向的 创建类,不是本身类。可以理解,TXXX,就是一个没有装饰,没有自己的独立的内存空间。
不如上面的代码
obj := TMyClass.Create;
showmessage(obj.MyFunction1); // self.classname 为 'TMyClass' 而不是 TMyClassHelper
showmessage(obj.MyFunction2); // self.classname 为 'TMyClass' 而不是 TMyClassHelper
showmessage(obj.MyFunction3); // self.classname 为 'TMyClass' 而不是 TMyClassHelper
Obj2 := TOtherClass.Create;
showmessage(Obj2.MyF); // self.classname 为 TOtherClass',不是 'TMyClass',也不是 ‘ TMyClassHelper’,这好理解
showmessage(Obj2.MyFunction1); // self.classname 为 'TOtherClass' 不是 'TMyClass',也不是 ‘ TMyClassHelper’
3、 Class 和 Record 都可以使用 Helper for
4、TXXX 不能定义自己的 字段和 属性,只能是 方法。
二、Objective-C 中 CateGory 类别
1、定义
@interface NSString (NewFunction)
-(NSNumber * )NewFunction; // 新定义的方法
@End
2、实现
@Implementation NSString (NewFunction)
-(NSNumber * )NewFunction // 新定义的方法
{
unsigned int length = [self length];
return ([NSNumber numberWithUnsignedInt : length]);
}
@End
3、定义一个类的多个类别,其名称必须唯一
4、 详细,可以参考 (http://www.cocoachina.com/bbs/read.php?tid=83441)