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

1273

如何使用 C# 标记方法为已过时或不建议使用?


4
不要忘记还有[EditorBrowsable(EditorBrowsableState.Never)](https://dev59.com/Ymox5IYBdhLWcg3wnllI#9086345)。它有稍微不同的用途。 - nawfal
5个回答

1974

最简单的方法是将ObsoleteAttribute添加为方法的属性。请确保包含适当的说明:

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

如果方法从代码中的某个位置被调用,您还可以使编译失败,将该方法的使用视为错误而不是警告

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

115
如果您希望编译器在有人使用该方法时抛出错误,请使用重载方法 Obsolete(String Message, Bool error)。 - HitLikeAHammer
164
没有说明的过时应该被视为过时...http://notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html - dotjoe
37
你的例子中,“Method1已过时”这部分内容有些多余。通过将其标记为过时,你已经表明它确实已经过时了,因此没有必要在消息中重复说明。特别是由于最终警告/错误会显示“Method1已过时:请使用Method2替代Method1”,所以没有必要再次声明它已过时。 - irreal
16
没问题。我只是放了一些示例文本在那里,以展示如果您愿意,可以添加更具体的消息。 - Chris Ballance
19
重命名或删除该方法会让用户不知道为什么要重命名或删除它,也不知道应该使用什么替代方法。 - Lensflare
显示剩余4条评论

187

通过带有警告的方式标记为废弃:

[Obsolete]
private static void SomeMethod()

当您使用它时会收到警告:

显示过时警告

还可以通过智能感知获得提示:

智能感知中的过时警告

如果您需要一条消息:

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

这里是 IntelliSense 工具提示:

IntelliSense 显示已过时消息

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

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

当你使用它时,你会得到以下结果:

方法的使用被显示为错误

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


90

ObsoleteAttribute是一个可以将方法标记为过时的属性。它有三个构造函数:

  1. [Obsolete]: 这是一个无参构造函数,也是默认使用此属性的方式。
  2. [Obsolete(string message)]: 使用这种格式可以获取为什么该方法被弃用的message
  3. [Obsolete(string message, bool error)]: 使用这种格式可以让message更加明确,同时error表示在编译时,编译器必须显示错误并导致编译失败还是不导致编译失败。

enter image description here


75

使用关键字Obsolete为方法添加注解。消息参数是可选的,但是推荐使用它来说明此项现在已过时以及应该使用什么替代品。
例如:

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

2

对于依赖注入的方法,请将[Obsolete("description")]属性应用于声明而不是实现(对我来说是个愚蠢的时刻)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接