我想在Delphi中标记一个属性为deprecated以便以后删除。根据Delphi文档deprecated可以附加到任何声明中,但它不适用于属性。有办法做到这一点吗?我是这么试的:
property SomeProp: string read FSomeProp write SetSomeProp; deprecated 'Use SomeOtherProp instead';
6za6bjd01#
不,这不可能。根据the documentation,“hint”指令platform、deprecated和library可以追加到任何声明。这些指令将在编译时生成警告。Hint指令可以应用于类型声明、变量声明、类、接口和结构声明、类或记录内的字段声明、过程、函数和方法声明以及单元声明。
5n0oy7gb2#
你不能这么做但是,您可以在属性setter/getter中编写已弃用的代码!因此,在您的示例中,您应该创建一个SetSomeProp setter,如下所示:
Type TYourClass = class private procedure DummyDepricated; deprecated 'Use SomeOtherProp instead'; procedure SetSomeProp(const AValue: string); published property SomeProp: string read FSomeProp write SetSomeProp; implementation procedure TYourClass.SetSomeProp(const AValue: string); begin DummyDepricated; //the old setter code here end; procedure TYourClass.DummyDepricated; begin //this is dummy end;
cunj1qz13#
如果属性是只读的,则可以使用简单的解决方法。代码如下所示:
property SomeProp: string read FSomeProp; deprecated 'Use SomeOtherProp instead';
改为:
function SomeProp: string; deprecated 'Use SomeOtherProp instead';
如果是我,我会走这条路:
function SomeProp: string; deprecated 'Use SomeOtherProp instead'; procedure SetSomeProp(Value: string); deprecated 'Call SomeOtherProp := Value instead';
3条答案
按热度按时间6za6bjd01#
不,这不可能。根据the documentation,
“hint”指令platform、deprecated和library可以追加到任何声明。这些指令将在编译时生成警告。Hint指令可以应用于类型声明、变量声明、类、接口和结构声明、类或记录内的字段声明、过程、函数和方法声明以及单元声明。
5n0oy7gb2#
你不能这么做但是,您可以在属性setter/getter中编写已弃用的代码!
因此,在您的示例中,您应该创建一个SetSomeProp setter,如下所示:
cunj1qz13#
如果属性是只读的,则可以使用简单的解决方法。
代码如下所示:
改为:
如果是我,我会走这条路: