0

resharper のコード インスペクションを介してコード分析を行っていたところ、次の警告が表示されました。

プロパティ「propertyname」の実装のみが使用されます

インターフェイスにこの警告があります。Google で検索すると、ジェットブレインのこのページが見つかりました: 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";

私はインターフェース忍者ではないので、両方のマナーの違いは何だろう..?

ありがとう!

4

2 に答える 2

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;
}
于 2013-03-28T12:26:11.007 に答える
2

var newTest = new Test() は、newTest のタイプを Test に設定します。ITest newTest = new Test() は、newTest のタイプを ITest に設定します。

したがって、以前の ITest では使用されないため、ITest は必要ありません。

したがって、resharper は、ITest は必要ないと言っているだけです。同意するかどうかはあなた次第です。ITest が必要ですか?

于 2013-03-28T12:25:34.617 に答える