3

現在のプロジェクトでは、Visual Studio 2010とC#を使用して、新しいメソッドを追加したり、古いメソッドやインターフェイスのメンバーを削除したりするために、定義したインターフェイスを更新しなければならないことがよくあります。その結果、コードベースを振り返り、インターフェイスを実装するすべてのクラスを見つけ、それらの廃止されたメソッドとメンバーのすべての出現箇所を手動で削除するか、クラスごとに[インターフェイスの実装]を選択して新しいものを追加する必要があります。これは非常に面倒で、ワークフローが遅くなります。

各クラスを経由せずに、インターフェイスを実装するすべてのクラスに、インターフェイスの新しいメソッドまたはメンバーのプレースホルダー実装を自動的に追加する方法はありますか?同様に、クラスが実装するインターフェイスからメソッドまたはメンバーを削除すると同時に、クラスからメソッドまたはメンバーを削除する方法はありますか?

4

2 に答える 2

5

ReSharperを使用している場合は、メソッドをインターフェイスに追加するだけで、クリックして [Alt+Enter派生クラスにメソッドを追加] を選択できます。

インターフェイスにメソッドを追加

メソッドを削除する場合は、次のRefactor > Safe Delete ...機能を使用できます。

安全な削除

于 2012-12-19T10:09:24.233 に答える
3

短い答え:いいえ。

1 つの可能性として、インターフェースを更新するのではなく、インターフェースに拡張メソッドを追加する方法があります。次に例を示します。

public static class SomeUtilityClass
{
    public static void DoTheAwesomez(this ISomeInterface obj, int count)
    {
        for(int i = 0 ; i < count ; i++)
        {
            obj.Foo();
            obj.Bar();
        }
    }
}

あなたが持っている場合:

ISomeInterface x = ...
x.DoTheAwesomez(20);

しかし、通常のインターフェイス メソッドの場合: いいえ、それを自動的に追加する方法はありません。「ビルド」をクリックするだけで、コンパイラはどの型が不足しているかを教えてくれます。インターフェイスの実装を共通の基本クラスに追加すると、多くの場合、一度に複数の型をヒットすることが容易になります。

メソッドを削除する場合: これを行う 1 つの方法は、明示的なインターフェイスの実装を使用することです。

class Foo : ISomeInterface {
    void ISomeInterface.SomeMethod(string x) {
         ....
    }
}

SomeMethodからメソッドを削除するISomeInterfaceと、コンパイラはそれが使用されているすべての場所について通知します。

SomeMethodすべてのメソッドを見つける他のローテクな方法には、次のものがあります。

  • ctrlshiftf(グローバル検索) - ローテクですが、機能します...
  • インターフェイスからメソッドを削除する直前に、リファクタリングを使用せずに名前を変更しますSomeMethod_xyz(またはその他):これを実装するすべてのタイプは、実装していないと文句を言い、これを消費するSomeMethod_xyzすべてのタイプは、そうではないと文句を言います。存在しないSomeMethod
于 2012-12-19T06:59:54.603 に答える