对声明为automated类型的方法和属性有以下限制:
? 所有属性、数组属性的参数、方法的参数以及函数的结果,它们的类型必须是自动化类型,包括Byte、
Currency、Real、Double、Longint、Integer、Single、Smallint、AnsiString、WideString、TDateTime、Variant、OleVariant、WordBool和所有接口类型。
? 方法声明必须使用默认的register调用约定,它们可以是虚方法,但不能是动态方法。
? 属性声明可以包含访问限定符(读和写),但不能包含其它限定符(index、stored、default和nodefault)。
访问限定符指定的方法必须使用默认的register调用约定,并且限定符不能使用字段。
? 属性声明必须指定一个类型,并且属性不支持覆盖(override)。
Automated方法或属性声明中可以包含dispid指示字,但指定一个已经使用的ID会导致错误。
在Windows中,这个指示字的后面必须跟一个整数常数,它为成员指定一个Automation dispatch ID。否则,编译器自动为它指定一个ID,这个ID等于类(包括它的祖先类)的方法或属性使用的最大ID加上
1。关于自动化的更多信息,请参考Automation objects。
Forward declarations and mutually dependent classes(Forward声明和相互依赖的类)
若声明一个类时以class和分号结束,也就是有下面的格式,
type className = class;
在class后面没有列出父类,也没有成员列表,这是一个forward声明。Forward声明的类必须在同一个声明区域进行定义声明,换句话说,在forward声明和它的定义声明之间除了类型声明外,不能有任何其它内容。
Forward声明允许创建相互依赖的类,比如
type
TFigure = class; // forward声明
TDrawing = class
Figure: TFigure;
...
end;
TFigure = class // 定义声明
Drawing: TDrawing;
...
end;
不要把forward声明和继承自TObject、不包含任何类成员的完整类声明混淆:
type
TFirstClass = class; // 这是forward声明
TSecondClass = class // 这是一个完整的类声明
end;//
TThirdClass = class(TObject); // 这是一个完整的类声明
- 99 -
Classes and objects
Fields(字段)
字段就像属于对象的一个变量,它可以是任何类型,包括类类型(也就是说,字段可以存储对象的引用)。字段通常具有private属性。
给类定义字段非常简单,就像声明变量一样。字段声明必须出现在属性声明和方法声明之前,比如,下面的声明创建了一个叫做TNumber的类,除了继承自TObject的方法之外,它有一个唯一的整数类型的成员Int。
type TNumber = class
Int: Integer;
end;
字段是静态绑定的,也就是说,它们的引用在编译时是固定的。
type
TAncestor = class
Value: Integer;
end;
TDescendant = class(TAncestor)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-72.html
小王子
badboy
卡死机两次了