如何避免“从未使用方法”消息?

Posted

技术标签:

【中文标题】如何避免“从未使用方法”消息?【英文标题】:How to avoid 'Method is never used' message? 【发布时间】:2015-08-20 20:08:38 【问题描述】:

在以下示例中,Resharper 抱怨 DoA() 方法从未被使用过,尽管它是由“AImplementator”类实现的:

namespace Test

    public interface A
    
        // Method 'DoA' is never used
        void DoA();
    

    public class AImplementator: A
    
        public void DoA()
        
            throw new System.NotImplementedException();
        
    

我无法理解这种行为,因为正在使用该接口。

    为什么会这样? 如何解决此警告?

Obs:我可以使用 cmets 或 [UsedImplicitly] 属性来抑制警告。但鉴于这种情况,这些选项似乎都不正确。我正在使用 Resharper 9.1。

【问题讨论】:

DoA 是一种方法而不是一种属性。除此之外,我刚刚尝试过,它并没有发出关于从未使用过 DoA 的警告。可以提供截图吗?我得到的唯一警告是将interface A 重命名为interface IA 无法在 8.2 中重复此警告。 DoA() 当然是一种方法。 在类中实现它不被视为使用它。这很有道理。 对我来说并不完全合理。它是公共接口的成员。 Resharper 无法知道 i/f 成员是否在任何地方或在全球数百万个开发人员项目中被调用。可能是 Resharper 中的错误?甚至 Jetbrains 也不是完美的! 【参考方案1】:

只有在Solution-Wide Analysis is enabled 时才会显示此警告。

警告是关于 interface 方法的使用(在本例中为调用)。下面的例子应该演示它(注意 var 与接口作为局部变量类型)。

var instance = new AImplementator();
// Does NOT make A.DoA() "used":
instance.DoA();

A instanceAsInterface = new AImplementator();
// DOES make A.DoA() "used":
instanceAsInterface.DoA();

【讨论】:

【参考方案2】:

回答其他人来这里。

如果你有 resharper 10。

您可以使用 jetrains 注释:

将其添加到您的项目中:https://www.nuget.org/packages/JetBrains.Annotations 文档:https://www.jetbrains.com/help/resharper/10.0/Reference__Code_Annotation_Attributes.html

将属性:[UsedImplicitly] 放在类上方就足够了。

很高兴知道它也可以放在基类上。

在这种情况下,将其放在接口 A 上将修复所有子类显示的消息(非常适合 ioc 实现)

namespace Test

    [JetBrains.Annotations.UsedImplicitly]
    public interface A
    
        // Method 'DoA' is never used
        void DoA();
    

    public class AImplementator: A
    
        public void DoA()
        
            throw new System.NotImplementedException();
        
    

测试

最好的解决方案是编写单元测试来涵盖这些功能。 这样做的好处是你的规格也被覆盖了。

【讨论】:

这是一个不好的解决方案的原因是它被“隐式使用”直到它不是。因此,如果有人去删除单个实现,那么它真的从未使用过,并且警告被注释隐藏 @JumpingJezza 非常好。如果你正在建立一个图书馆,我认为这是唯一的方法。除非你写测试:)

以上是关于如何避免“从未使用方法”消息?的主要内容,如果未能解决你的问题,请参考以下文章

当它已经超时时,我们如何避免多个 Rebus 消息?

如何避免在 iOS 中使用 Facebook SDK 时出现“重复状态消息”错误?

如何避免 as.numeric() 中的“警告消息:强制引入的 NA”[重复]

如何避免重复添加?

如何通过在主面板中输出注意文本来避免错误消息

[转]如何使用消息系统避免分布式事务?