3

在下面的示例中,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. 我该如何解决这个警告?

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

4

2 回答 2

1

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

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

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

A instanceAsInterface = new AImplementator();
// DOES make A.DoA() "used":
instanceAsInterface.DoA();
于 2015-06-07T17:08:51.523 回答
1

回答其他人去这里。

如果你有 resharper 10。

您可以使用 jetrains 注释:

将属性:[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();
        }
    }
}

测试

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

于 2016-06-16T06:56:55.960 回答