차이

2013-03-28 2 views
0

나는 ReSharper에서에서 코드 검사를 통해 몇 가지 코드 분석을하고 있었고, 난 다음 경고를 가지고 :차이

만 구현 http://confluence.jetbrains.com/display/ReSharper/Only+implementations+of+property+are+used

전혀 때문에 나에게 도움이되지 않은 : 나는 구글 경우,

난 내 인터페이스가이 경고 사용되는 재산 'propertyName 형식'의 난 JetBrains의이 페이지를 발견 n 더 이상 인터페이스가 없어도 ...

그래서 경고를 없애는 방법을 테스트하기 시작했습니다. folowing 더미 인터페이스와 클래스에 :

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(); 

난 아직도 당신이

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

은 또한 다음을 수행 작성하는 경우 occurt 것입니다 경고를 같은데요하지 않습니다 경고를 제거 하시겠습니까?

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

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

실제로 세 번째 경고와 함께 경고가 표시됩니다. 마지막 하나는 보이지 않습니다. var one 대신 'IX x = new X();'를 사용하는 것이 유리합니까? 또는 모범 사례가 있습니까? – bruno

+0

@bruno 내가 생각할 수있는 유일한 차이점은 변수를 IX로 사용하면 코드에서 비 인터페이스 메소드를 사용하지 못하도록하고 IX에서 X로 X를 사용하여 강제로 사용하지 못하게 할 것입니다. 반드시 이점이 아닙니다. 개인 용도로 사용하는 것이 더 많아 질 것이라고 생각합니다. –

2

var newTest = new Test()는 newTest의 유형을 Test로 설정합니다. ITest newTest = new Test()는 newTest의 유형을 ITest로 설정합니다.

전 ITest는 사용되지 않으므로 필요하지 않습니다.

그래서 resharper는 ITest가 필요 없다고 말합니다. 동의하는지 여부는 전적으로 귀하에게 달려 있습니다. ITest가 필요합니까?