我无法计算我错误地做了多少次:
for i := 0 to MyList.count-1 do begin
myobject := TMyObject(MyList[i])
.......
end;
Run Code Online (Sandbox Code Playgroud)
什么时候应该这样:
for i := 0 to MyList.count-1 do begin
myobject := TMyObject(MyList.objects[i])
.......
end;
Run Code Online (Sandbox Code Playgroud)
请注意第二段代码中的对象.
错误的代码片段将运行,并且当我尝试使用myobject时,显然会抛出访问冲突.但是,我做错了并不总是很明显.
是否有编译器选项可以防止这种情况发生?
Delphi有两种方法可以TObject(var)使用As运算符进行类型转换,硬件使用和软件广播.As除非您100%确定,否则始终使用操作员是一种好习惯.在您的具体示例中
(MyList[i]) as TMyObject 不编译在哪里
(MyList.objects[i]) as TMyObject 确实.
不会.编译器假设您在键入时表示您知道自己在做什么.它将允许几乎任何类型转换,其中两种类型具有相同的大小,除了在整数和浮点类型之间进行转换之外.
对于这个特定的例子,尝试让自己养成使用as运算符的习惯.然后,当您忘记使用该Objects属性时,编译器将捕获您:
myobject := MyList[i] as TMyObject; // compiler error
myobject := MyList.Objects[i] as TMyObject; // OK
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |