37

ICarマウスを ICar 式の上に移動し、Implement Interface実装の下の Visual Studio の生成をクリックしたときなど、単純なインターフェイスがあると考えてください。

インターフェイスで見られるように、自動プロパティだけを提供する方法はありますか? これはリファクタリングの問題を引き起こし、毎回私を夢中にさせます!

    public interface ICar
    {
        double Power { get; set; }
    }

    public class Car:ICar
    {

        public double Power
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }
    }
4

4 に答える 4

3

まず、これは自動プロパティではありません。自動プロパティが必要な場合は、コンパイラが生成したものを削除して置き換える必要があります

public double Power { get; set; }

それが自動プロパティです。

コンパイラがこれを行うのは、コンパイラがコンパイルできるコードを生成する最も簡単な方法だからです。インターフェイスのプロパティの自動プロパティを実行できると思いますが、メソッドの処理方法(メソッドスタブ生成します)とプロパティの間に矛盾が生じます。NotImplementedExceptionつまり、これを変更できます。スニペットで処理されます。

1) スニペット ディレクトリを開き、このファイルを見つけます。 C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\1033\Refactoring\PropertyStub.snippet

2)PropertyStub.snippetファイルを変更し、プロパティ スタブを次のように置き換えます。

 <![CDATA[$signature$ { $GetterAccessibility$ get; $SetterAccessibility$ set; }]]>

のボディMethodStub.snippetを生成するために同じことを行うことができます。

Visual Studio を使用してインターフェイスを自動実装すると、最終的に次のようになります。

 public double Power { get; set; }
于 2013-07-17T15:02:13.077 に答える