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

Chr*_*nce 955 .net c# versioning

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

Chr*_*nce 1525

最简单的方法是将ObsoleteAttributeas 属性添加到方法中.确保包含适当的解释:

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

您还可以导致编译失败,如果从代码中的某处调用此方法,则将方法的用法视为错误而不是警告:

[Obsolete("Method1 is deprecated, please use Method2 instead.", true)]
Run Code Online (Sandbox Code Playgroud)

  • 没有描述的过时应该是过时的... http://notherdev.blogspot.com/2013/02/obsolete-should-be-obsolete.html (134认同)
  • 如果你想让编译器抛出错误,如果有人使用该方法使用重载方法Obsolete(String Message,Bool error) (95认同)
  • 在您的示例中,"Method1已弃用"部分相当多余.通过将其标记为过时,您说它确实已经过时,因此无需在消息中重述它.特别是因为生成的警告/错误将显示为'Method1'已废弃:'Method1已弃用,请改用Method2'. (30认同)
  • @ akshay2000重命名或删除该方法会让消费者不知道为什么重命名或删除它以及应该使用什么. (14认同)
  • 没关系.我只是在那里放了一些示例文本,以表明如果您愿意,可以添加更具体的消息. (7认同)
  • 似乎课程可以标记为过时,以及个别方法...... (5认同)
  • 在过时的方法或属性上强制编译错误的另一个原因是,当需要使用反射但不用于直接调用的东西时.我面前的例子是序列化到特定数据库所需的属性,但应该永远不会被应用程序代码使用. (3认同)
  • `Obsolete`允许你逐步退出一个方法,类等,如果你愿意:警告,错误,消失.我认为,这比消费代码/编码器更好,而不仅仅是删除有问题的元素. (3认同)
  • 最好使用`[过时(“ Method1已过时,请使用” + nameof(Method2)+“。”)]`避免使用硬编码字符串,以防万一方法名称必须更改。任何原因。 (2认同)

mar*_*k_h 117

要通过警告标记为已废弃:

[Obsolete]
private static void SomeMethod()
Run Code Online (Sandbox Code Playgroud)

使用时会收到警告:

显示过时警告

并使用IntelliSense:

使用IntelliSense的过时警告

如果你想要一条消息:

[Obsolete("My message")]
private static void SomeMethod()
Run Code Online (Sandbox Code Playgroud)

这是IntelliSense工具提示:

IntelliSense显示过时的消息

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

[Obsolete("My message", true)]
private static void SomeMethod()
Run Code Online (Sandbox Code Playgroud)

使用时,这是你得到的:

方法用法显示为错误

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


jch*_*ell 66

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

[System.Obsolete("use myMethodB instead")]
void myMethodA()
Run Code Online (Sandbox Code Playgroud)


Sin*_*tfi 31

ObsoleteAttribute你可以显示[Obsolete]:方法.过时的属性有三个构造函数:

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

在此输入图像描述