如何避免'Method is never used'消息?



在下面的例子中,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();
        }
    }
}

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

  1. 为什么会这样?
  2. 如何修复此警告?

注意事项:我可以使用注释或[UsedImplicitly]属性来抑制警告。但考虑到目前的情况,这两种选择似乎都不正确。我用的是Resharper 9.1

此警告只会在启用解决方案范围分析时显示。

警告是关于接口方法的使用(在这种情况下,例如调用)。下面的示例应该演示它(注意var与接口作为局部变量类型)。

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

回答其他人来这里。

如果你有resharper 10.

你可以使用jetrain注释:

  • 把它放到你的项目中: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();
        }
    }
}
测试

最好的解决方案是编写单元测试来覆盖这些功能。优点是你的规格也包括在内。

相关内容

  • 没有找到相关文章

最新更新