“var objectName = new SomeObject()”和“interfaceName objectName = new SomeObject()”之间的区别

时间:2013-03-28 12:20:20

标签: c# .net interface resharper code-inspection

我正在通过resharper的代码检查进行一些代码分析,我得到了下一个警告:

  

仅使用属性'propertyname'的实现

这个警告我在我的界面上,如果我谷歌我发现这个jetbrains页面: http://confluence.jetbrains.com/display/ReSharper/Only+implementations+of+property+are+used

这根本没有帮助我,因为那时我再也没有界面......

所以我开始测试如何摆脱那个警告。 在下面的虚拟接口和类:

public interface ITest
{
    string Name { get; set; }
}

public class Test: ITest
{
    public string Name { get; set; }
}

如果我使用:

var newTest = new Test();
newTest.Name= "newName";

然后发出警告。但是当我使用下一行时,警告将消失。

ITest newTest = new Test();
newTest.Name = "newName";

我不是Ninja的界面,所以我想知道,两种方式有什么区别......?

谢谢!

2 个答案:

答案 0 :(得分:3)

这推断出具体类型:

//X is of type X
var x = new X(); 

这不是

//X is of type IX
IX x = new X();

我猜你写这个警告仍会发出

//X is of type X
X x = new X();

以下是否会删除警告?

public void TestX()
{
    //X is of type X
    var x = new X();
    UseIX(x);
}

public void UseIX(IX interfaceParam)
{
    interfaceParam.Foo = 1;
}

答案 1 :(得分:2)

var newTest = new Test()将newTest的类型设置为Test。 ITest newTest = new Test()会将newTest的类型设置为ITest。

因此,以前的ITest不需要,因为它从未使用过。

所以resharper只是说你不需要ITest。你是否同意这取决于你。你需要ITest吗?