首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"var objectName= new SomeObject()“和"interfaceName objectName= new SomeObject()”的区别

"var objectName= new SomeObject()“和"interfaceName objectName= new SomeObject()”的区别
EN

Stack Overflow用户
提问于 2013-03-28 12:20:20
回答 2查看 179关注 0票数 0

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

只使用属性“propertyname”的实现

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

那对我一点帮助都没有,因为那样我就没有接口了.

所以我开始测试如何消除这个警告。在折叠虚拟接口和类上:

代码语言:javascript
复制
public interface ITest
{
    string Name { get; set; }
}

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

如果我用:

代码语言:javascript
复制
var newTest = new Test();
newTest.Name= "newName";

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

代码语言:javascript
复制
ITest newTest = new Test();
newTest.Name = "newName";

我不是一个界面忍者,所以我想知道,这两种方式有什么区别?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-28 12:26:11

这就推断出混凝土的类型:

代码语言:javascript
复制
//X is of type X
var x = new X(); 

这不是

代码语言:javascript
复制
//X is of type IX
IX x = new X();

我猜如果你写的话这个警告还会出现

代码语言:javascript
复制
//X is of type X
X x = new X();

以下是否也删除了警告?

代码语言:javascript
复制
public void TestX()
{
    //X is of type X
    var x = new X();
    UseIX(x);
}

public void UseIX(IX interfaceParam)
{
    interfaceParam.Foo = 1;
}
票数 3
EN

Stack Overflow用户

发布于 2013-03-28 12:25:34

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

因此,对于前者,ITest并不是必需的,因为它从未被使用过。

所以,resharper只是说你不需要ITest。你是否同意由你来决定。你需要ITest吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15681665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档