差異

2013-03-28 19 views
0

我是做通過從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"; 

我不是一個接口忍者,所以我想知道,兩種禮儀之間有什麼區別..?

謝謝!

+0

是否可以[this](http://stackoverflow.com/questions/296783/resharper-vars?rq=1)文章幫助你?在我看來,那裏也是這樣。 –

+0

結帳本文可能對您有所幫助http://msdn.microsoft.com/en-us/library/64syzecx(v=vs.80).aspx – navya

回答

3

此推斷具體類型:

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

這不

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

我猜還是會occurt如果你寫

//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; 
} 
+0

的確,警告與第三個一起顯示。最後一個沒有顯示。 但是有沒有和使用'IX x = new X();「而不是var的優點? 或者有最佳實踐...? – bruno

+0

@bruno我能想到的唯一區別是聲明因爲IX的變量會阻止你在代碼中使用非接口方法,並強迫你使用IX到X來使用它們,這並不是一個好處,我認爲它的用法更多地取決於個人偏好。 –

2

var newTest = new Test()會將newTest的類型設置爲Test。 ITest newTest = new Test()會將newTest的類型設置爲ITest。

因此,與前ITEST是不需要的,因爲它從來沒有使用過。

所以resharper只是說你不需要ITest。無論您是否同意,由您決定。你需要ITest嗎?