当我看到在原来的Delphi源代码(大多在firemonkey)所作的修改,我看到Embarcadero公司的某个时候取代if assigned(MyObj) then的if (MyObj <> nil) then.他们有任何真正的理由这样做,还是仅仅是纯粹的化妆品?
Dav*_*nan 13
对于指针,对象引用,动态数组,接口,没有区别.你也可以.
对于方法指针,存在差异.IDE表单设计器使用已发布的方法指针属性(例如事件)做了一些技巧.当这些是nilIDE表单时,设计器将索引存储在其中一个指针的低两个字节中.如果您要对此进行测试,nil您会发现该值不是nil,这是不希望的.
所以你使用Assigned它忽略低两个字节.这在Windows上是可行的,因为低于65536的内存地址是保留的,并且不能是有效的指针.这对于在IDE表单设计器中运行的代码(即设计时包)至关重要.组件编写者必须Assigned在这些情况下使用.
请注意,这仅适用于Win32编译器.由于这是IDE运行的唯一平台,Assigned因此这是唯一具有此特殊行为的平台.
Allen Bauer在这里讨论了这个问题:Assigned or not Assigned,这是问题......
还有一点要做:
Assigned.nil当主题是支持已发布属性的方法指针并且您的代码在设计时运行时,进行比较是错误的.就个人而言,我总是使用,Assigned因为这样可以保证代码的一致性.此外,这意味着您甚至不必考虑测试的主题是单指针类型还是双指针类型,或者您的代码是否在设计器中运行.
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |