.NET:如何将方法标记为“尚未使用”?

4
我正在使用ASP.NET,我知道可以将方法标记为: 但我想知道是否可以将方法标记为“尚未使用”,这意味着“我编写了它,但实际上它没有被使用,迟早会有人使用它”。
谢谢!

3
展示一个方法从未被使用有何意义?如果该方法是内部或私有成员,您将收到有关未使用成员的VS警告;对于公共成员,您只能使用ReSharper。但是,只要您不想删除未使用的方法,这种功能就没有实际用途了。 - MakePeaceGreatAgain
如果你只是想要一种笔记或清单,你可以随时使用特殊的VS TODO:注释,或者其他适当的注释关键字。 - Sam Axe
我在一些代码中实现了一个新属性,它将被用于很多地方。尽管它是一个新属性,但我将其标记为“过时”。在许多地方正确设置该属性的值需要一些工作,因此在此期间我将其设置为空字符串。我不确定这个新属性的影响,并且它给了我一个很好的指示,表明在正确设置它时所需的努力。 - LarryBud
6个回答

12
你可以在方法中抛出一个带有适当消息的 NotImplementedException。这将确保在运行时不会调用该方法。
public void MyMethod(){
  throw new NotImplementedException("This will be implemented soon");
}

如果你想使用元信息,你可以定义自己的属性来装饰你的方法。(但我认为你也可以重复使用ObsoleteAttribute,并添加特殊消息)

OP表示他已经编写了那个方法,但没有调用它。在一个你不调用的方法中抛出异常并不是很有帮助。 - Patrick Hofman
@PatrickHofman 当然。它只确保在运行时不调用该方法(抛出异常)。如果他在方法中使用异常,他可以使用正常的 Visual Studio 工具查找所有未实现引用。 - Jehof
提到特殊属性“fixes”解决了我对你的回答的问题。取消踩。 - Patrick Hofman

6
不,你不能这样做。而且这样做也没有多大意义。 Visual Studio 2015会显示当前项目中的方法使用情况,这是判断“死”方法的指标。

enter image description here


2

我猜你想要它用于一种未来的功能,目前还没有激活,因为它没有完全实现(这是我能想到的唯一有意义的情况)。

如果你不想让它被使用,请不要将其放在界面中(应该使用接口)或者将其放在一个只有你自己拥有的不同界面中。你也可以使用Obsolete装饰器,并附上“这个方法现在还不能使用”的消息。

如果任何人都可以使用它,因为它是公开的并且已发布,那么你不需要关心它有多少参考。通常,如果引用来自你的解决方案之外,你就无法知道它们是否存在。你不应该删除这样的方法,因为那会造成破坏性的改变。

如果它是私有的,你的IDE应该会警告你,然后你可以删除它或注释掉它的未来使用;添加对它所设计的功能的引用,以便在关闭它(即某人决定不再实现它)时可以删除它。


1

仅仅因为你可以做某事并不意味着你应该去做...
为什么要编写尚未使用的代码?

这就像在撒哈拉带上保暖内衣以防寒流袭来,当你只是白天来访问。

虽然你可以抛出一个NotImplementedException,但这不会给你编译时的安全性 - 它只会在运行时抛出此异常。


你可能在不久的将来晚上来访,所以你正在为此做准备。 - LarryBud
这不是YAGNI的工作方式。 - Alex

1
这由NotImplementedException管理,当您实现接口并且知道未来需要的成员但不想立即实现它们时,它可以非常有用。方法的任何用户都将收到异常,但是如果您需要编译时标志,最好使用Obsolete属性,并附上一个有意义的消息,例如“此方法尚未实现”,以及内部的异常。

这有点荒谬,但这个问题再次证明程序员不能读:http://haacked.com/archive/2007/02/27/Why_Cant_Programmers._Read.aspx/ - MarengoHue

1
你可以在文档注释中表达关于未使用方法的所有悲伤。只是不要抛出NotImplementedException,否则这个方法永远不会被使用。
虽然这有点愚蠢,但如果它没有被使用,你应该将其删除。实践证明,大多数“尚未,但也许某一天”的代码根本不会被使用,因此删除它是完全有道理的。如果以后你需要这个方法,你总是可以查看源代码控制
如果你想更加随意地处理解决方案,你总是可以做一些愚蠢的事情,比如实现你自己的[PleaseUseMe]属性

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