delphi – Variant属性可以有默认值吗?
我编写了一个具有Variant属性的组件,我想为其设置一个默认值.
TMyComponent = class(TComponent) private FVariantValue : Variant; published property VariantValue : Variant read FVariantValue write FVariantValue default False; end; 在编译时,我在VariantValue属性行上收到以下错误:
使用Boolean属性执行相同操作不会导致任何类型的错误. 我读了一点documentation,但我没有发现Variant属性的默认值. 解决方法
这里要小心.默认指令不执行任何操作来设置属性本身的值.它仅影响值是否显式保存在.dfm文件中.如果为属性指定默认值,则仍必须确保构造函数将支持字段初始化为该值.
Properties : Storage Specifiers
这只是组件流系统的一个提示,它不需要在.dfm中显式存储该值 – 您的合同部分是确保您实际将支持字段初始化为该值.进行此类初始化的适当位置是在组件的构造函数中: constructor TMyComponent.Create(AOwner: TComponent); begin inherited Create(AOwner); FVariantValue := False; end; 也就是说,False是布尔值,而不是变量,因此它不能用作Variant类型的常量表达式.由于变体是复杂类型,因此不能将其表示为单个常量,因此不能具有默认属性. Per Remy,如果要在后备变量为False时确保变量未保存在.dfm文件中,则可以使用带有无参数方法的stored指令,当变量求值为布尔值False时,该方法返回False.例如 : property VariantValue : Variant read FVariantValue write FVariantValue stored IsVariantValueStored; 哪里 function TMyComponent.IsVariantValueStored : Boolean; begin Result := not VarIsType(FVariantValue,varBoolean); if not Result then Result := FVariantValue; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |