|
|
1
6
不 两种安全解决方案是:
|
|
|
2
3
在这样一些情况下,类的记录需要“直接操纵”,我经常采用以下方法:
这样做的好处是,您可以利用Delphi自动取消引用来对每个记录元素进行可读代码访问,即: MyObject.MyRec.MyNum:=123; 我记不起来了,但也许用这种方法可以奏效——我尽量不使用它! |
|
|
3
1
|
|
|
4
0
记录是 价值观 他们甚至有复制语义赋值!这就是为什么不能就地更改属性值。因为它会违反FRec的值类型语义,并破坏依赖于它的代码是不可变的或至少是安全副本。 这里的问题是,为什么您需要一个值(您的TRec)来表现为一个对象/实体? 如果“TRec”正是您使用它的目的,那么它是否更适合作为一个类呢?
|
|
|
5
0
更改它的原因是它是一个编译器错误。它编译的事实并不能保证它会工作。
您的代码会突然中断,您会首先责怪Delphi/Borland允许它。
使用Brian的建议返回一个指针,但删除带-you can eaisly do Point.X:=10; |
|
|
6
-2
另一种解决方案是使用辅助函数:
它假设记录的每个成员都是(P)整数大小,如果不是,则AV将崩溃。
|