【问题标题】:If I mark a method as Obsolete["...", true], what should be the return value? An arbitrary value?如果我将方法标记为 Obsolete["...", true],返回值应该是什么?任意值?
【发布时间】:2017-11-02 21:49:17
【问题描述】:

我有一个方法正在被废弃(实际上完全不受支持),因为它的基本概念正在被删除。所以,这个方法不能有任何实现,我把它做成了throw new NotSupportedException()Obsolete 属性的 error 参数也会导致编译错误是否有意义?或者如果我要这样做,我应该只返回一个任意值(因为该方法永远不会运行)?有人可以解释或将我链接到最佳实践文档吗?

【问题讨论】:

  • 如果你抛出NotSupportedException,你不必返回任何东西。这对我来说似乎是最好的主意。

标签: c# .net deprecated obsolete


【解决方案1】:

您不应该将[Obsolete] 方法的实现更改为总是抛出异常。

您违背了此属性的全部目的,您会将有效的方法标记为已过时,这意味着您不再保证在您的 API 的下一个版本中该方法将存在。

虽然方法被标记为过时,但其他开发人员有一些时间来处理他们的代码并应对新的变化。而不是仅仅分解他们的代码。

如果您总是要抛出异常,您最好将其完全删除,或者具有相同的实现但将其标记为[Obsolete] 并在适当时将其完全删除。

from MSDN

Obsolete 属性将程序实体标记为不再推荐使用。每次使用标记为过时的实体都会随后生成警告或错误

它是否说它总是抛出异常并且它不再工作了?不。如果您的方法不再有效,则您进行了重大更改,因此您必须以某种方式使其有效并将其标记为过时,或者将其完全删除。

另一个好点,

Obsolete 属性可以在不带参数的情况下使用,但建议说明为什么该项目已过时以及改用什么。

【讨论】:

  • Obsolete[.., true] 生成编译错误,“每次使用标记为过时的实体都会随后生成警告或错误”。因此,“它是否说它总是抛出异常并且它不再起作用了?” - 差不多,是的,除了它是一个编译时错误。 仅使用[Obsolete] 属性的重大更改。因此,如果您这样做,您不妨删除实现。异常似乎是合理的,因为您必须抛出或返回某些东西,这样即使有人使用反射恶作剧来调用您的方法,他们也会得到运行时异常。
猜你喜欢
  • 2014-05-31
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2021-12-24
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多