jpf*_*ius 3 delphi records delphi-2007 delphi-2010
以下情况:
type
TRec = record
Member : Integer;
end;
TMyClass = class
private
FRec : TRec;
public
property Rec : TRec read FRec write FRec;
end;
Run Code Online (Sandbox Code Playgroud)
以下不起作用(左侧不能分配),这是可以的,因为它TRec是一个值类型:
MyClass.Rec.Member := 0;
Run Code Online (Sandbox Code Playgroud)
在D2007中,虽然以下内容有效:
with MyClass.Rec do
Member := 0;
Run Code Online (Sandbox Code Playgroud)
不幸的是,它在D2010中不起作用(我认为它在D2009中也不起作用).第一个问题:为什么?故意改变了吗?或者它只是其他一些变化的副作用?D2007的解决方法只是一个"错误"吗?
第二个问题:您如何看待以下解决方法?使用安全吗?
with PRec (@MyClass.Rec)^ do
Member := 0;
Run Code Online (Sandbox Code Playgroud)
我在这里谈论现有代码,因此必须进行的更改才能使其工作应该是最小的.
谢谢!
那
MyClass.Rec.Member := 0;
Run Code Online (Sandbox Code Playgroud)
不编译是设计的.事实上,两个"有" - 构造的编译是(AFAICT)仅仅是疏忽.所以两者都不 "安全使用".
两种安全解决方案是:
MyClass.Rec给您操作并分配回的临时记录MyClass.Rec.TMyClass.Rec.Member作为自己的权利的性质.| 归档时间: |
|
| 查看次数: |
3842 次 |
| 最近记录: |