覆盖的Size属性添加了写限定符,允许属性能被修改;覆盖的Text和Color属性把可见性从protected改变为published;覆盖的Color属性还指定若它的值不为clBlue,它将被保存进文件。
若重新声明属性时包含类型标志符,这将隐藏继承下来的属性而不是覆盖它,也就是创建了一个(和继承下来的属性)具有相同名称的新属性。任何指定类型的属性声明必须是完整的,也就至少要包含一个访问限定符。
派生类中属性是隐藏还是覆盖呢?属性的查找总是静态的,也就是说,对象(变量)声明的类型决定了它的属性。所以,在下面的代码执行后,读取MyObject.Value或给它赋值将调用Method1或Method2,即使MyObject存储的是TDescendant的一个实例;但你可以把MyObject转换为TDescendant来访问派生类的属性和它们的访问限定符。
type
TAncestor = class
...
property Value: Integer read Method1 write Method2;
end;
TDescendant = class(TAncestor)
...
property Value: Integer read Method3 write Method4;
end;
var MyObject: TAncestor;
...
MyObject := TDescendant.Create;
Class references(类引用)
Class references: Overview(概述)
有时,我们需要使用类本身而不是它的实例(也就是对象),比如,当使用类引用来调用构造函数时。你总是能使用类名来引用一个类,但有时,你也需要声明变量或参数把类作为它的值,这种情况下,你需要使用类引用类型。
Class-reference types(类引用类型)
类引用类型有时称为元类,用如下的构造形式表示
class of type
这里,type是任何类类型。type(标志符)本身表示一个class of type(元类)类型的值。
的祖先类,则class of type2(元类)和class of type1(元类)是赋值兼容的。这样
type TClass = class of TObject;
var AnyObj: TClass;
声明了一个叫做AnyObj的变量,它能存储任何类引用。类引用类型的声明不能直接用于变量或参数声明中。你能把nil值赋给任何类引用变量。
要了解类引用类型如何使用,看一下TCollection(在Classes单元)的构造函数声明:
type TCollectionItemClass = class of TCollectionItem;
... 若type1是type2
- 113 -
Classes and objects
constructor Create(ItemClass: TCollectionItemClass);
上面声明说,要创建一个TCollection实例对象,你必须向构造函数传递一个类名,它属于TCollectionItem类或是它的派生类。
当你调用一个类方法,或者调用一个类(或对象)的虚构造函数(编译时它们的类型不能确定)时,类引用是很有用的。
Constructors and class references(构造函数和类引用)
构造函数可通过一个类引用类型的变量进行调用,这允许创建编译时类型并不确定的对象。比如, type TControlClass = class of TControl;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-84.html
感觉千玺和里面的小王子形象好贴近
缅甸
后一条慢慢来