Value: string;
end;
var
MyObject: TAncestor;
begin
MyObject := TDescendant.Create;
MyObject.Value := 'Hello!';//
TDescendant(MyObject).Value := 'Hello!';
end;
虽然MyObject存储了TDescendant的一个实例,但它是以
MyObject.Value解释为TAncestor声明的整数字段。不过要知道,在
是存在的,继承下来的字段被新字段隐藏了,但可以通过类型转换对它进行操作。
Methods(方法)
Methods: Overview(概述)
方法是一个和类相关联的过程或函数,调用一个方法需指定它作用的对象
如,
SomeObject.Free
调用SomeObject的Free方法。
- 100 - 要理解上面的意思,请考虑下面的代码: // 隐藏了继承的Value字段 错误 // 工作正常 TAncestor声明的,所以,编译器把TDescendant对象中,这两个字段都 (若是类方法,则指定类),比
Classes and objects
Method declarations and implementations(方法声明和实现) Method declarations and implementations(方法声明和实现)
在类声明中,方法看起来像过程头和函数头,工作起来像forward声明。在类声明后的某个地方(必须属于同一模块),每个方法必须有一个定义声明来实现它。比如,假设TMyClass类声明包含一个叫做DoSomething的方法:
type
TMyClass = class(TObject)
...
procedure DoSomething;
...
end;
DoSomething的定义声明必须在模块的后面出现:
procedure TMyClass.DoSomething;
begin
...
end;
虽然类声明既可以出现在单元的intece部分,也可以出现在implementation部分,但类方法的实现(定义声明)必须出现在implementation部分。
在定义声明的头部,方法名总是使用类名进行限定。在方法的头部可以重新列出类声明时的参数,若这样做的话,参数的顺序、类型以及名称必须完全相同,若方法是函数的话,返回值也必须相同。
方法声明可包含一些特殊指示字,而它们不会出现在其它函数或过程中。指示字应当只出现在类声明中,并且以下面的顺序列出:
reintroduce; overload; binding; calling convention; abstract; warning
这里,binding是virtual、dynamic或override;calling convention是register、pascal、cdecl、stdcall或safecall;warning是platform、deprecated或library。
Inherited(继承)
关键字inherited在实现多态行为时扮演着特殊角色,它出现在方法定义中,后面跟一个标志符或者不跟。 若inherited后面跟一个成员名称,它表示一个通常的方法调用,或者是引用一个属性或字段(except that the search for the referenced member begins with the immediate ancestor of the enclosing method’s class)。比如,当
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-73.html
没人觉得