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


Answers:


1592

最简单的方法是将ObsoleteAttributeas作为属性添加到方法中。确保包括适当的解释:

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

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

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

97
如果您希望编译器在有人使用该方法的情况下引发错误,请使用重载的方法Obsolete(String Message,Bool error)
HitLikeAHammer


31
在您的示例中,“ Method1已过时”部分相当多余。通过将其标记为过时,您表示它确实是过时的,因此无需在消息中重新声明。特别是由于产生的警告/错误将显示为“ Method1”已过时:“ Method1已过时,请改为使用Method2。”
irreal

8
没关系。我只是在此处放一些示例文本,以表明您可以根据需要添加更具体的消息。
克里斯·巴伦斯

14
@ akshay2000重命名或删除该方法将使消费者不知道为什么要重命名或删除该方法以及应该使用什么方法。
Lensflare

134

用警告标记为过时:

[Obsolete]
private static void SomeMethod()

使用时会收到警告:

显示过时的警告

借助IntelliSense:

IntelliSense已过时的警告

如果您想留言:

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

这是IntelliSense工具提示:

IntelliSense显示过时的消息

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

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

使用后,您会得到:

方法使用情况显示为错误

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


66

使用关键字在方法中添加注释Obsolete。消息参数是可选的,但是一个很好的主意,用于传达为什么现在该项目已过时和/或使用什么代替。
例:

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

35

随着ObsoleteAttribute你可以显示的方法已过时。过时的属性具有三个构造函数:

  1. [Obsolete]: 是无参数构造函数,并且是使用此属性的默认值。
  2. [Obsolete(string message)]:以这种格式,您可以了解message为什么不赞成使用此方法。
  3. [Obsolete(string message, bool error)]:这种格式的消息非常明确,但是error意味着在编译时,编译器必须显示错误,并导致编译失败与否。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.