我有一个记录类型,其中的方法代表一种特定的硬件测量类型,可以从仪器中以字符串形式读取。该记录包含对字符串的隐式覆盖。如果我将字符串强制转换为记录类型,那么它似乎可以工作,但是这样安全吗?也就是说,将字符串转换为具有隐式字符串转换的记录是否按照分配临时值的方式调用隐式转换?

var  a: MeasurementRecord;         // record type with implicit string conversion & decode methods
b: string;
c:double;
begin
b := Edit1.Text;              // Or any other string source
a:=b;                         //Ok
a:= edit1.text;               //Ok
c:= a.returnQc;                 // returns measurement quality value

c:= MeasurementRecord(Edit1.text).returnQC;   //Avoiding local variable. This works, but is it correct useage?

end;

最佳答案

是的,这是绝对安全的。代码MeasurementRecord(Edit1.text)将使用您的字符串MeasurementRecord创建一个Edit1.Text记录

class operator Implicit(S: string): MeasurementRecord

然后在其中调用函数returnQC。 (但是,如果您还有一个
class operator Explicit(S: string): MeasurementRecord

那么将使用它,因为强制转换实际上是显式的。)

关于Delphi(-XE): casting to a record type with implicit conversion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7666786/

10-11 19:10