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

How to avoid 'Method is never used' message?

在下面的例子中,Resharper 抱怨 DoA() 方法从未被使用,尽管 'AImplementator' class:

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. 如何修复此警告?

Obs:我可以使用注释或 [UsedImplicitly] 属性来抑制警告。但鉴于这种情况,这两种选择似乎都不正确。我正在使用 Resharper 9.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();

在这里回答其他人。

如果您有 resharper 10。

你可以使用 jetrains annotatoins:

将属性:[UsedImplicitly] 放在 class 之上就足够了。

值得一提的是,将它放在底座上也可以工作 class。

在这种情况下,将其放在接口 A 上将修复显示所有子classes 的消息(非常适合 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();
        }
    }
}

测试

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