在下面的例子中,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();
}
}
}
我无法理解这种行为,因为接口正在被使用。
- 为什么会这样?
- 如何修复此警告?
注意事项:我可以使用注释或[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();
}
}
}
测试最好的解决方案是编写单元测试来覆盖这些功能。优点是你的规格也包括在内。