【问题标题】:How to deprecate an Array type declaration in Delphi?如何在 Delphi 中弃用 Array 类型声明?
【发布时间】:2017-06-08 14:02:39
【问题描述】:

我需要将数组类型声明标记为已弃用(嗯,实际上不止一个),以帮助将我们的代码迁移到更高级和更灵活的TArray<T> 泛型类型。

我试过这个:

type
  TArrayChars = array of Char deprecated;

但我得到一个编译错误:E2029 ';' expected but identifier 'deprecated' found

如果声明的类型不是数组,则同样适用,例如:

type
  TFieldChars = set of Char deprecated;

请注意,这在设计上应该是可行的。

我错过了什么?


这似乎是 Delphi 中的一个错误(至少 10.1 柏林和 10.2 东京)。

我接受的答案提出了一个简洁的解决方法,即:

type
  TArrayCharsOld = array of Char;
  TArrayChars    = TArrayCharsOld deprecated;

我会向 Embarcadero 提交错误报告。


这是我提交的 Embarcadero QC 问题: https://quality.embarcadero.com/browse/RSP-18316

【问题讨论】:

  • 你应该提交错误报告。
  • @William 不,这不是那个问题的重复,这里我说的是声明一个 TYPE 已弃用,这应该可以阅读文档。属性是另一回事,文档中没有提到。
  • @Bozzy 但链接问题的答案可用于您的问题。
  • @William 怎么样?那里链接的文档指出问题中的代码应该编译。
  • @DavidHeffernan 这可能是一个 delphi 错误。

标签: arrays delphi deprecated


【解决方案1】:

有办法绕过它(至少在柏林 10.1 中)。

type
  TArrayCharsOld = array of Char;
  TArrayChars = TArrayCharsOld deprecated;

编译。

【讨论】:

  • 是的,这将完成它,也很狡猾。我试过了,看到它编译了,但没有飞跃来安排别名,以便弃用的类型是其余代码使用的类型。干得好。
  • 是的,它有效!实际上,每次使用已弃用的类型时,我都会收到 两个 相同的警告!也许这是另一个错误?
  • 是的,我也收到了两个警告。
  • 也许这会加强摆脱某些东西的感觉!
  • 我认为您不能直接弃用数组声明这一事实是一个错误,而不是“按设计”。您现在收到两个警告的事实可能与该错误有关。
【解决方案2】:

没什么好说的。不能将动态数组类型声明标记为已弃用。

我认为这是一个缺陷。 documentation 说:

“提示”指令平台、已弃用和库可能是 附加到任何声明。这些指令将在 编译时间。提示指令可以应用于类型声明, 变量声明、类、接口和结构声明, 类或记录、过程、函数和 方法声明和单元声明。

您的动态数组类型声明符合此处列出的要求,因为它是一个类型声明。

【讨论】:

  • 这是一种人们永远不会希望阅读的答案。我会向 Embarcadero 提交错误报告。
  • 不管解决方法如何,您仍应提交错误报告
  • 当然可以。变通办法不是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
相关资源
最近更新 更多