如何避免 '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();
}
}
}
我无法理解这种行为,因为正在使用该接口。
- 为什么会这样?
- 如何修复此警告?
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:
- 将其添加到您的项目中:https://www.nuget.org/packages/JetBrains.Annotations
- 文档:https://www.jetbrains.com/help/resharper/10.0/Reference__Code_Annotation_Attributes.html
将属性:[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();
}
}
}
测试
最好的解决方案是编写单元测试来覆盖这些功能。
好处是您的规格也包含在内。
在下面的例子中,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();
}
}
}
我无法理解这种行为,因为正在使用该接口。
- 为什么会这样?
- 如何修复此警告?
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:
- 将其添加到您的项目中:https://www.nuget.org/packages/JetBrains.Annotations
- 文档:https://www.jetbrains.com/help/resharper/10.0/Reference__Code_Annotation_Attributes.html
将属性:[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();
}
}
}
测试
最好的解决方案是编写单元测试来覆盖这些功能。 好处是您的规格也包含在内。