是否可以将整个const块标记为已弃用?

时间:2014-12-04 14:07:35

标签: delphi delphi-7

我知道您可以使用

将单个常量标记为已弃用
const
  NotDeprConst1 = 1;
  DeprConst = 2 deprecated;
  NotDeprConst2 = 2;

但是,您是否可以将整个const块标记为已弃用而不逐个标记常量?

我想做点什么:

const deprecated
  DeprConst1 = 1;
  DeprConst2 = 2;
  DeprConst3 = 3;

但是不能编译(编译器将“已弃用”视为标识符)。

或许有一个编译器指令:

{$DEPRECATED ON}
const
  DeprConst1 = 1;
  DeprConst2 = 2;
  DeprConst3 = 3;
{$DEPRECATED OFF}

Embarcadero的提示指令documentation表示你可以用提示标记任何声明(比如已弃用),但没有详细说明。

4 个答案:

答案 0 :(得分:11)

正如您所知,const块不能一次性弃用。还有像你在推测的编译器指令一样。但是,您引用的documentation表示

  

当一个提示指令出现在一个单位声明中时,它意味着   提示适用于单位中的所有内容。例如,Windows 3.1   Windows上的样式OleAuto.pas单元已完全弃用。任何   对该单位的引用或该单位中的任何符号产生一个   弃用消息。

通过将弃用的const声明移动到新单元并标记该单元已弃用,您可以一次性弃用大量声明。然后,当然,您仍然需要修复单位引用。是否省力,由你来决定。

答案 1 :(得分:3)

这是可能的,但它需要一些工作,只需将它们全部标记为已弃用将会更加 更容易。

无论如何,你可以这样做:

旧情况

type
  TMyClass = Class
  private  
  public  
    const
      Const1 = 1;
      Const2 = 2;
      Const3 = 3;
  end;

新情况

type
  TDeprecatedClass = Class
  private
  public
    const
      Const1 = 1;
      Const2 = 2;
      Const3 = 3;
  end deprecated;

  TMyClass = Class
  private  
  public  
    const
      Const1 = TDeprecatedClass.Const1;
      Const2 = TDeprecatedClass.Const2;
      Const3 = TDeprecatedClass.Const3;
  end;

每当您使用TMyClassTDeprecatedClass中的一个常量时,您将收到编译器警告。

就像我说的那样,这不是一个非常快速或实用的方法,但它完成了工作 现在,如果您想逐个标记它们,它是您的选择:)

我希望这对你有所帮助。

答案 2 :(得分:3)

您需要将每个变量单独标记为已弃用。对于它的价值,当货币& RTL中不推荐使用日期/时间格式变量,每个变量都单独标记。

来自Delphi XE RTL来源:

var
  CurrencyString: string deprecated 'Use FormatSettings.CurrencyString';
  CurrencyFormat: Byte deprecated 'Use FormatSettings.CurrencyFormat';
  CurrencyDecimals: Byte deprecated 'Use FormatSettings.CurrencyDecimals';
  DateSeparator: Char deprecated 'Use FormatSettings.DateSeparator';
  TimeSeparator: Char deprecated 'Use FormatSettings.TimeSeparator';
  [...]

答案 3 :(得分:1)

根据常量的布局方式以及常量中的实际内容,您可以在代码中执行一些技巧。这很简单。突出显示整个常量块,然后打开Replace Text屏幕。对于Text to Find,请添加分号;。对于Replace With,请输入deprecated;(带有前导空格)。然后选择Replace All。它将简单地用所需的文本替换所有分号。这假设您并不打算为每个消息添加自定义消息,但如果您有一条公共消息,则可以将其包含在Replace With字段中。

请注意,这并没有在技术上回答问题,但它确实解决了一次弃用许多常量的根本问题。