如何在 VS2010 中自动添加或删除所有接口实现的方法?

How do I automatically add or remove methods from all implementations of an interface in VS2010?

提问人:akbiggs 提问时间:12/19/2012 更新时间:12/19/2012 访问量:3336

问:

在我当前的项目中,使用 Visual Studio 2010 和 C#,我经常发现自己必须更新我定义的接口,以添加新的或删除接口的新方法和成员。因此,我必须回顾我的代码库,找到实现接口的所有类,并手动删除所有出现的过时方法和成员,或者通过为每个类选择“实现接口”来添加新方法和成员。这非常乏味,而且会减慢我的工作流程。

有没有办法自动将接口的新方法或成员的占位符实现添加到实现接口的所有类中,而不必遍历每个类?同样,有没有办法在从类实现的接口中删除方法或成员的同时从类中删除它?

C# visual-studio-2010 快捷方式

评论

0赞 nawfal 12/19/2012
我不这么认为。但是,您从当前的 VS 行为中获得的好处是,当您向接口添加方法时,您将获得编译时错误,这真的很棒。因此,您知道您也必须在派生类中实现它们。虽然删除可能不会从中受益,但它也不会给您带来任何问题,因为在子类中使用冗余方法对于编译器来说是可以的。现在我认为 reshaper 可以告诉你是否冗余了方法,你可以很容易地删除它们。

答:

3赞 Marc Gravell 12/19/2012 #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);

但是对于常规接口方法:不,没有自动添加它的方法,只需点击“构建”,编译器就会告诉你哪些类型缺少它。将接口实现添加到公共基类通常可以很容易地同时命中多个类型。

要删除该方法:一种方法是使用显式接口实现

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

现在,如果从 中删除该方法,编译器将告诉您使用它的所有位置。SomeMethodISomeInterface

查找所有方法的其他低技术方法包括:SomeMethod

  • ctrlshiftf(Global Find) - 技术含量低,但有效......
  • 在从接口中删除该方法之前,将其重命名而不使用重构(或其他任何方法): 现在,所有实现此方法的类型都会抱怨它们没有实现,并且所有使用它的类型都会抱怨不存在SomeMethod_xyzSomeMethod_xyzSomeMethod
5赞 RoelF 12/19/2012 #2

如果您使用的是 ReSharper,则只需将方法添加到界面中,单击并选择“将方法添加到派生类”:Alt+Enter

Add method to interface

如果要删除方法,可以使用以下功能:Refactor > Safe Delete ...

Safe Delete

评论

0赞 akbiggs 12/22/2012
棒。刚开始使用 ReSharper...这个工具很棒。
0赞 voddy 4/3/2014
Telerik JustCode 具有与“将存根添加到所有继承者”和“安全删除”相同的选项