类的构造函数 class destructor Destroy; //类的析构函数 constructor Create(); //实例的构造函数 destructor Destroy; override; //实例的析构函数 end; { TTest } class constructor TTest.Create; begin StaticABC := 1234; end; class destructor TTest.Destroy; begin end;
constructor TTest.Create; begin FABC := StaticABC; end; destructor TTest.Destroy; begin inherited Destroy; end; 呵呵.很有意思.虽然以前用 Unit 的 initialization/finalization 可以实现.但是如果有了类的构造 和析构语法的话代码的可读性会更好. 同时还发现结构体(Record)也可以用一样的语法.可编译通过,但是实际上却没有效果.估计以 后会加上这个功能吧
语言新特性——内嵌类,内嵌常量_ ——内嵌类 delphi2006 语言新特性——内嵌类,内嵌常量_登高望远
内嵌类 内嵌类在类的内部声明,它被大量的应用在.net framework 以及面向对象的编程中,它表 明一种概念性关联关系,并且避免了命名冲突,它同样支持 delphi 定义内嵌类 它使用如下语句定义 type className = class [abstract | sealed] (ancestorType) memberList type nestedTypeDeclaration memberList end; 当内嵌类定义遇到第一个非标识符时终止,例如:procedure, class, type 和所有可见性 win32 编译.
范围修饰符.内嵌类与容器类同样适用正常的访问,可见性规则.一个内嵌类能存取它的容 器类实例的变量(如字段,属性或者方法),但是它必须要有一个参考对象.一个内嵌类能 存取类静态字段(class fields)类属性(class properties)和类静态方法(class sta tic methods)且不用参考对象,但必须遵守 delphi 可见性规
则. 内嵌类不增加容器类的大小, 建立一个容器类实例时不会同时建立内嵌类的实例, 内嵌类与 容器类仅仅是定义的上下文关系. 定义和使用内嵌类 下面的例子演示如何去定义和存取内嵌类的字段和方法. type TOuterClass = class strict private myField: Integer; public type TInnerClass = class public myInnerField: Integer; procedure innerProc; end; procedure outerProc; end; 在实现内嵌类的 innerProc 方法时,你必须指定它的容器类的名字,例如: procedure TOuterClass.TInnerClass.innerProc; begin
…… end; 可以用 . 标志像存取一般的类成员一样去存取嵌套类的成员.例如: var x: TOuterClass; y: TOuterClass.TInnerClass; begin x := TOuterClass.Create; x.outerProc; …… y := TOuterClass.TInnerClass.Create; y.innerProc; end; 内嵌常数 常数也可以同样在内嵌类型块中声明, 常数块的结束标志与内嵌类块的结束标志一样, 关键 字或可见性修饰符.内嵌常数不支持类型常量,如 Borland.Delphi.System.Currency 或 B orland.Delphi.System.TDateTime .它只支持简单类型,如:序数,枚举,字符串,实数 等类型. 下面的代码
演示声明内嵌常量 type TMyClass = class const x = 12; y = TMyClass.x + 23;
procedure Hello; private const s = 'A string constant'; end; begin writeln(TMyClass.y); end. // 输出 y 的值 35.
delphi2006 语言新特性-帮助类 语言新特性-
帮助类(Class Helpers) 帮助类是联合其它类的一种类型,它能为联合类(包括它的派生类)增加方法和过程.它为我们 提供了一种不使用 inheritance 来扩展一个类的能力, 你可以在任何地方使用帮助类, 编译器自动 决定在什么时候使用原始类还是增加的帮助类. (注意:帮助类只是一种扩展一个类的方法,但 是应该仅仅在为实现某种新目的而开发新代码时被使用, 而不应该视为一个
设计工具被使用. 它 是绑定语言和平台 RTL 的 ) 定义一个帮助类的语法:
type identifierName = class helper [(ancestor list)] for classTypeIdentifierName memberList end; end
ancestor list 是可选的 一个帮助类不可以定义实例数据,但允许有类字段(class fields)