如何在 Delphi 中标记一个属性为deprecated?

sirbozc5  于 2023-03-08  发布在  其他
关注(0)|答案(3)|浏览(243)

我想在Delphi中标记一个属性为deprecated以便以后删除。根据Delphi文档deprecated可以附加到任何声明中,但它不适用于属性。有办法做到这一点吗?
我是这么试的:

property SomeProp: string
  read   FSomeProp
  write  SetSomeProp; deprecated 'Use SomeOtherProp instead';
6za6bjd0

6za6bjd01#

不,这不可能。根据the documentation
“hint”指令platformdeprecatedlibrary可以追加到任何声明。这些指令将在编译时生成警告。Hint指令可以应用于类型声明、变量声明、类、接口和结构声明、类或记录内的字段声明、过程、函数和方法声明以及单元声明。

5n0oy7gb

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;
cunj1qz1

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';

相关问题