如何将方法标记为过时或弃用?

Posted

技术标签:

【中文标题】如何将方法标记为过时或弃用?【英文标题】:How to mark a method as obsolete or deprecated? 【发布时间】:2010-12-18 01:51:43 【问题描述】:

如何使用 C# 将方法标记为过时或不推荐使用?

【问题讨论】:

别忘了还有[EditorBrowsable(EditorBrowsableState.Never)] (***.com/a/9086345/661933)。用途略有不同。 【参考方案1】:

使用ObsoleteAttribute,您可以将方法标记为已弃用。 它有三个构造函数:

    [Obsolete]: 是一个无参数构造函数,是使用该属性的默认值。 [Obsolete(string message)]: 在这种格式中,您可以得到 message 说明为什么不推荐使用这种方法。 [Obsolete(string message, bool error)]: 这种格式的消息非常明确,但error 意味着,在编译时,编译器必须显示错误并导致编译失败。

【讨论】:

【参考方案2】:

最短的方法是将ObsoleteAttribute 添加为attribute to the method。确保包含适当的解释:

[Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
 … 

如果从这样的代码中的某处调用该方法,您也可能导致编译失败,将方法的使用视为错误而不是警告

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]

【讨论】:

如果您希望编译器在有人使用该方法时抛出错误,请使用重载方法 Obsolete(String Message, Bool error) 过时的没有描述的应该是过时的...notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html 在您的示例中,“Method1 已弃用”部分相当多余。通过将其标记为已过时,您表示它确实已过时,因此无需在消息中重申它。特别是由于产生的警告/错误将显示“方法 1”已过时:“方法 1 已弃用,请改用方法 2。” 没关系。我只是在那里放了一些示例文本,以表明您可以根据需要添加更具体的消息。 @akshay2000 重命名或删除该方法会使消费者不知道为什么要重命名或删除它以及应该改用什么。【参考方案3】:

使用关键字Obsolete 为方法添加注释。消息参数是可选的,但可以很好地说明为什么该项目现在已过时和/或改用什么。 示例:

[System.Obsolete("use myMethodB instead")]
void myMethodA()

【讨论】:

【参考方案4】:

用警告标记为过时:

[Obsolete]
private static void SomeMethod()

使用时会收到警告:

使用 IntelliSense:

如果你想留言:

[Obsolete("My message")]
private static void SomeMethod()

这是 IntelliSense 工具提示:

最后,如果您希望将用法标记为错误:

[Obsolete("My message", true)]
private static void SomeMethod()

使用时,您会得到:

注意:使用消息告诉人们他们应该使用什么,而不是为什么它已经过时。

【讨论】:

以上是关于如何将方法标记为过时或弃用?的主要内容,如果未能解决你的问题,请参考以下文章

将 WebApi 方法的参数标记为过时/不推荐用于 Swashbuckle / Swagger

PhantomJS已被Selenium标记为过时的应对措施

如何在 RAML 中将 REST 服务标记为已弃用

delphi 如何将属性标记为已弃用?

将 pybind11 绑定标记为已弃用的最佳方法

将 PLSQL 过程/函数标记为已弃用