...
end; fieldOrMethodHeading的值通
- 109 - 如果它是在祖先则
Classes and objects
给出上面的声明,语句
if Compass.Heading = 180 then GoingSouth;
Compass.Heading := 135;
对应于
if Compass.FHeading = 180 then GoingSouth;
Compass.SetHeading(135);
在TCompass类中,读取Heading属性时没有执行任何命令,只是取回存储在FHeading字段的值;另一方面,给Heading赋值变成了对SetHeading方法的调用,我们推测,它的操作将是把新值存储在FHeading字段,还可能包括其它命令。比如,SetHeading可能以如下方式实现:
procedure TCompass.SetHeading(Value: THeading);
begin
if FHeading <> Value then
begin
FHeading := Value;
Repaint; // 刷新用户界面来反映新值
end;
end;
若声明属性时只有读限定符,则它是只读属性;若只有写限定符,则它是只写属性。当给一个只读属性赋值,或在表达式中使用只写属性时都将产生错误。
Array properties(数组属性)
数组属性是被索引的属性,它们能表示像下面的一些事物:列表中的条目、一个控件的子控件和位图中的象素等等。
声明数组属性时包含一个参数列表,它指定索引的名称和类型,比如,
property Objects[Index: Integer]: TObject read GetObject write SetObject;
property Pixels[X, Y: Integer]: TColor read GetPixel write SetPixel;
property Values[const Name: string]: string read GetValue write SetValue;
索引参数列表的格式和过程(或函数)的参数列表相同,除了使用中括号取代了圆括号。不像数组只使用有序类型的索引,数组属性的索引能使用任何类型。
对数组属性,访问限定符必须使用方法而不是字段。读限定符的方法必须是一个函数,它的参数数目、类型以及顺序必须和索引中列出的一致,并且返回值和属性是同一类型;对写限定符,它必须是一个过程,这个过程必须使用索引中列出的参数,包括数目、类型以及顺序必须相同,另外再加一个和属性具有相同类型的值参(传值)或常量参数。
比如,前面的属性可能具有如下的访问方法声明:
function GetObject(Index: Integer): TObject;
function GetPixel(X, Y: Integer): TColor;
function GetValue(const Name: string): string;
procedure SetObject(Index: Integer; Value: TObject);
procedure SetPixel(X, Y: Integer; Value: TColor);
procedure SetValue(const Name, Value: string);
一个数组属性通过使用属性索引来进行访问。比如,语句
if Collection.Objects[0] = nil then Exit;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-81.html
同志们是取向差异