我知道您可以使用
将单个常量标记为已弃用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表示你可以用提示标记任何声明(比如已弃用),但没有详细说明。
答案 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;
每当您使用TMyClass
或TDeprecatedClass
中的一个常量时,您将收到编译器警告。
就像我说的那样,这不是一个非常快速或实用的方法,但它完成了工作 现在,如果您想逐个标记它们,它是您的选择:)
我希望这对你有所帮助。
答案 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
字段中。
请注意,这并没有在技术上回答问题,但它确实解决了一次弃用许多常量的根本问题。