How to mark a method as obsolete or deprecated?
如何使用c_将方法标记为已过时或已弃用?
- 这是一段YouTube视频,解释了过时属性的所有3种变化:youtube.com/watch?V=αAQ5WSPNFJ4
- 别忘了还有[EditorBrowsable(EditorBrowsableState.Never)](stackoverflow.com/a/9086345/661933)。目的略有不同。
最短的方法是将ObsoleteAttribute作为属性添加到方法中。确保包括适当的解释:
1 2 3
| [Obsolete("Method1 is deprecated, please use Method2 instead.")]
public void Method1()
{ … } |
如果从以下代码中的某个位置调用方法,则还可以导致编译失败,将方法的使用视为错误而不是警告:
1
| [Obsolete("Method1 is deprecated, please use Method2 instead.", true)] |
- 如果希望编译器在有人使用该方法时抛出错误,请使用已过时的重载方法(字符串消息、bool错误)
- 没有描述的过时应该过时…notherdev.blogspot.com/2013/02/obsolete应该是‌&8203;-obsolete.html
- 类似乎可以标记为已过时,以及单个方法…
- 在您的示例中,"method1 is deprecated"部分是相当多余的。通过将其标记为过时,您会说它确实是过时的,因此无需在消息中重述它。特别是,由于生成的警告/错误将读取"method1"已过时:"method1已弃用,请改用method2。"
- 那很好。我只是在这里放了一些示例文本,说明如果您愿意,可以添加更具体的消息。
- @如果我们的目标是编译器错误,那么为什么不更改方法名,让编译器为之哭泣呢?注释的意义是什么?
- @Akshay2000你必须问微软为什么要把这个功能放到.NET中。我猜您可以先将标志设置为假以创建警告,然后在解决所有警告后将标志设置为真。当然,更改方法名也会产生同样的效果。我想这只是另一种方法。
- @Akshay2000重命名或删除该方法会使消费者对重命名或删除该方法的原因以及应使用的内容一无所知。
- 强制对过时的方法或属性执行编译错误的另一个原因是,当某个使用反射但不用于直接调用的对象需要它时。我前面的示例是一个属性,它是序列化到特定数据库所必需的,但不应被应用程序代码使用。
- @Lensflare我认为这意味着,如果您的代码不被外部组使用,您确实可以完全替换该方法。也就是说.NET开发人员需要保留旧代码,但是我的5人团队不需要麻烦。我想得对吗?
- 辛贾伊是的。但团队规模并不重要。仅当该方法是否用作公共API时才重要。如果它是私有的,请将其删除。
- 如果您愿意的话,Obsolete允许您在多个发布中逐步淘汰一个方法、类等:警告、错误、消失。我认为,这比删除相关元素更适合于使用代码/编码程序。
- 如果方法名因任何原因必须更改,那么使用[Obsolete("Method1 is deprecated, please use" + nameof(Method2) +" instead.")]来避免硬编码字符串可能是一个很好的实践。
标记为已过时并带有警告:
1 2
| [Obsolete]
private static void SomeMethod() |
使用时会收到警告:
以及智能感知:
如果您需要消息:
1 2
| [Obsolete("My message")]
private static void SomeMethod() |
以下是IntelliSense工具提示:
最后,如果希望将用法标记为错误:
1 2
| [Obsolete("My message", true)]
private static void SomeMethod() |
当使用时,这就是你得到的:
注意:使用消息告诉人们应该使用什么,而不是为什么它是过时的。
使用关键字Obsolete向方法添加注释。message参数是可选的,但它是一个很好的主意,可以说明为什么现在该项已过时和/或使用什么。例子:
1 2
| [System.Obsolete("use myMethodB instead")]
void myMethodA() |
使用ObsoleteAttribute可以显示不推荐使用的方法。过时的属性有三个构造函数:
[Obsolete]: is a no parameter constructor and is a default using this attribute.
[Obsolete(string message)]: in this format you can get message of why this method is deprecated.
[Obsolete(string message, bool error)]: in this format message is very explicit but error means, in compilation time, compiler must be showing error and cause to fail compiling or not.