如何将类标记为已弃用?

Mis*_*Dev 213 .net c# oop deprecated

可能重复:
如何将方法标记为已过时/已弃用?- C#

你如何将一个类标记为已弃用?我不想在我的项目中再使用一个类,但不想在2周之前删除它.

Pat*_*ins 384

您需要使用该属性[Obsolete].

这是一个例子:

[Obsolete("Not used any more", true)]
public class MyDeprecatedClass
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

您没有使用参数,它们是可选的(重载方法).第一个参数是出于这个原因,最后一个参数是在编译时标记错误而不是警告.

  • @tymtam 您说得对,但您可能希望给开发人员一些时间将他们的代码迁移到您的新实现中,然后再将其拉开。将组件标记为 1-2 个版本已过时是很常见的。 (3认同)
  • `[过时("不再使用",真实)]`这里有两个主要缺陷:1.如果代码不再使用它应该被删除2.解释不提供使用/做什么的信息代替. (2认同)
  • 一种用例是:将其“ 1或2个发行版”保留为默认设置(“ false”),并在注释中提及。然后在适当的时候将其更改为“ true”,这样那些仍在使用它的人现在将在其代码中出现错误并被迫进行更改。```[[已淘汰(“将于2018年12月12日弃用。改为使用xyz。”]]```然后...```[[已经废除(“方法已于2018年12月12日弃用。改为使用xyz。”, true)]```。这样很清楚。然后在另一个日期将其完全删除。 (2认同)
  • @tymtam 立即删除公共 API 并不明智,因为其他使用它的人会感到困惑和惊讶。您应该删除代码,而不要仅将私有部分标记为过时,或者仅当您是唯一处理或使用该代码的开发人员时。 (2认同)

Reb*_*cca 41

根据Doak的回答,如果你想要编译代码,属性的第二个参数应该设置为false:

[Obsolete("Not used any more", false)]
public class MyDeprecatedClass
{
        //...
}
Run Code Online (Sandbox Code Playgroud)

这只会发出警告.

  • 您也可以完全关闭属性(默认为false):`[已淘汰(“不再使用”)]]; 就个人而言,我发现在末尾没有布尔值的情况下可读性更高。 (2认同)

小智 21

不擦除类并弃用的原因是当您的代码是已建立的API然后被第三方使用时,遵守一些"礼貌政策".

如果您弃用而不是擦除,则为消费者提供生命周期策略(例如,维护和存在类,直到版本XX),以便允许他们规划适当的迁移到新API.