Delphi 是否可以将整个常量块标记为已弃用?
我知道您可以使用Delphi 是否可以将整个常量块标记为已弃用?,delphi,delphi-7,Delphi,Delphi 7,我知道您可以使用 const NotDeprConst1 = 1; DeprConst = 2 deprecated; NotDeprConst2 = 2; 但是,您可以在不逐个标记常量的情况下将整个常量块标记为已弃用吗 我想做一些类似的事情: const deprecated DeprConst1 = 1; DeprConst2 = 2; DeprConst3 = 3; 但是,它不会编译(编译器将“弃用”视为标识符) 或者可能有一个编译器指令: {$DEPRECAT
const
NotDeprConst1 = 1;
DeprConst = 2 deprecated;
NotDeprConst2 = 2;
但是,您可以在不逐个标记常量的情况下将整个常量块标记为已弃用吗
我想做一些类似的事情:
const deprecated
DeprConst1 = 1;
DeprConst2 = 2;
DeprConst3 = 3;
但是,它不会编译(编译器将“弃用”视为标识符)
或者可能有一个编译器指令:
{$DEPRECATED ON}
const
DeprConst1 = 1;
DeprConst2 = 2;
DeprConst3 = 3;
{$DEPRECATED OFF}
Embarcadero的提示指令说,您可以用提示标记任何声明(如已弃用),但不需要详细说明。这是可能的,但需要一些工作,简单地将它们全部标记为已弃用将更加容易 无论如何,这里是你可以做到的: 旧情 新形势 无论何时使用
TMyClass
或TDeprecatedClass
中的一个常量,都会收到编译器警告
正如我所说,这不是一个非常快速或实用的方法,但它可以完成工作。现在,您可以选择是否逐个标记它们:)
我希望这对您有所帮助。正如您所发现的,const块不能一次就被弃用。也没有像您推测的那样的编译器指令。但是,您提到的 当提示指令出现在单元声明中时,表示 提示适用于单元中的所有内容。例如,Windows3.1 Windows上的style OleAuto.pas单元已被完全弃用。任何 引用该单位或该单位中的任何符号会产生 弃用消息
通过将已弃用的常量声明移动到新单元并将该单元标记为已弃用,可以一次性弃用大量声明。当然,您仍然需要修复单元引用。是否省力由您决定。您需要单独将每个变量标记为已弃用。值得一提的是,当货币和日期/时间格式变量在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';
[...]
根据常量的布局,以及常量中实际包含的内容,可以在代码中使用一些技巧。这相当简单。突出显示整个常量块,并打开
替换文本
屏幕。对于要查找的文本
,请输入分号代码>。对于替换为,输入弃用代码>(带前导空格)。然后选择“全部替换”
。它将简单地用所需的文本替换所有分号。这是假设您不打算将自定义消息与每个消息放在一起,但如果您有一条公共消息,则可以将其包含在替换为
字段中
请注意,这在技术上并不能回答所写的问题,但它确实解决了一次否决许多常量的根本问题。在我看来,您可以尝试一下,看看会发生什么,所花的时间比您在此处发布问题、设置格式和创建链接所花的时间要少。你为什么不呢?他可以尝试一个特定的想法,@Ken,但这并不排除实现丹尼尔没有想到的目标的其他语法。你的回答针对了这个例子,但并没有真正回答这个问题。@Ken,Daniel广泛地询问了如何反对整个区块。他提出了一个可能的解决办法。您说明了解决方案不起作用,但没有说明是否可以以任何其他方式弃用块。丹尼尔后来通过添加另一个建议的解决方案来证明这一点。我能想到更多的。我们可以集思广益地讨论语法,你可以整天为我们测试它们,但它仍然不能回答一开始是否可行的问题(除非我们碰巧猜到一个可行的方法)。@KenWhite我把这个问题理解为“是否有可能…”,但你似乎把它解释为“这段代码行得通吗…”我刚刚检查了修订历史,它包含“类似于:”从#1开始。对我来说,这意味着OP也在寻找替代品。我希望避免移动东西around@Daniel我可以理解,但除了a)单独标记,b)转移到其他单位或c)标准箱建议,似乎没有其他方法,这需要大量编辑。我们谈论的是几十个项目还是几百个项目?在一个文本文件中,大约1050个常量(通过$include)使用了110多个单位,分布在15个不同的项目中projects@Daniel这使你最初的问题与我第一次阅读时的理解完全不同。也许编辑器宏可以为你做单独的标记?@Daniel,FWIW:编辑1050个常量不需要花费很长时间。加上一点正则表达式的魔力,它应该在几分钟内完成。
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;
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';
[...]