delphi2006语言新特性——类静态字段、类属性

本文转自http://hi.baidu.com/homejun/blog/item/3cd2cd1b6c60f4faaf5133d0.html
delphi2006语言新特性——类静态字段、类属性
类静态字段 Class Fields
(直译应为类字段,为避免混淆,本文统称类静态字段)

类静态字段是类的一种特殊字段,它可以在类没有实例化时访问(普通的实例字段必须在类实例化后才能访问)。类静态字段储存的值可以被所有实例共享。(很有意思,赋一下值,所有类,实例都会改变,感觉很有用)
你可以用关键字class var在类的声明部分定义一个类静态字段块,所有在class var 以后定义的字段都是静态存储的。当遇到以下情况时类静态字段块结束:
1声明另外一个 class var 或var
2声明一个 procedure 或 function (包含class procedures and class functions)
3声明一个 property (包含class properties)
4声明一个 constructor 或 destructor
5可见性范围修饰符(public, private, protected, published, strict private, and strict protected)
例:
type
TMyClass = class
public
class var // 定义一个类静态字段块
Red: Integer;
Green: Integer;
Blue: Integer;
var // 结束类静态字段块
InstanceField: Integer;
end;

类静态字段 Red, Green,和Blue 能被以下代码存取:

TMyClass.Red := 1;
TMyClass.Green := 2;
TMyClass.Blue := 3;

类静态字段也可以通过一个类实例存取,如下面的声明:

var
myObject: TMyClass;

下面的代码也可以达到同样的效果。

myObject.Red := 1;
myObject.Green := 2;
myObject.Blue := 3;
类属性 Class Properties
类属性不用实例化就可以存取。类属性的存取必须定义为类方法,或者类静态字段。(看来只不过是编译器的魔术,实际上是用类方法、类静态字段存取的)类属性使用class property 关键字声明。类属性不能published,并且不能有stored 或 default值。
例:
type
TMyClass = class
strict private
class var // 定义一个类静态字段块
FRed: Integer;
FGreen: Integer;
FBlue: Integer;
public // 结束类静态字段块
class property Red: Integer read FRed write FRed;
class property Green: Integer read FGreen write FGreen;
class property Blue: Integer read FBlue write FBlue;
end;
你可以用下面的代码存取:
TMyClass.Red := 0;
TMyClass.Blue := 0;
TMyClass.Green := 0;

posted @ 2013-06-11 08:59  Max Woods  阅读(240)  评论(0编辑  收藏  举报