使用 Delphi 11.3(包括Patch 1)。
我为一个自定义Variant
类型创建了一个Record Helper
。
我的助手记录正在工作,但是编译器在编译时不验证我的助手调用。
Type
TTest = Type Variant;
TTestHelper = Record Helper for TTest
Public
Function GetV: Variant;
Function AsString: String;
end;
{ TTestHelper }
function TTestHelper.GetV: Variant;
begin
Result := Self;
end;
function TTestHelper.AsString: String;
begin
Result := VarToStr(Self);
end;
//Simple button clik
procedure TForm5.Button1Click(Sender: TObject);
var
V: TTest;
begin
V := 'test';
V := V.GetV; //Works as intended
V := V.fopergkergprgkergtk4k3tp3gkg3p; //Compiles without any issue, but of course it gives an "Invalid Variant Operation" when I press the button.
end;
字符串
为什么编译器编译的代码显然是垃圾,为什么我的代码完成窗口没有显示我的任何方法(GetV
和AsString
)?
1条答案
按热度按时间p1iqtdky1#
为什么编译器编译的代码明显是垃圾代码
这是
Variant
的一个功能。Variant
可以包含不同的内容,包括一个到COM对象的IDispatch
接口,该接口在运行时而不是在编译时“后期绑定”到函数/属性。COM对象可能会提供只能在执行阶段侦测到的function fopergkergprgkergtk4k3tp3gkg3p
,因此编译器会允许Variant
上.
之后的所有项目进行编译,而且会在执行阶段进行解析,因此可能会在执行阶段成功或失败。