【问题标题】:Automatically generate implementations of base class methods自动生成基类方法的实现
【发布时间】:2009-04-02 05:15:27
【问题描述】:

在 C# (VS 2008) 中是否有某种捷径可以在派生类中自动实现虚拟和抽象基类方法?

【问题讨论】:

    标签: c# visual-studio


    【解决方案1】:

    对于虚拟方法,您可以输入override,然后输入一个空格。 Intellisense 应该为您提供一个选项列表。

    对于抽象方法和属性,您可以在基类或接口上使用智能标记(也可以是 Ctrl+.Shift +Alt+F10 将显示智能标签菜单)以生成具体项目。

    例如,在下面的代码 sn-p 中,您可以将插入符号放在 INotifyPropertyChanged 的末尾,然后按 Ctrl+ 然后选择实现接口,并且PropertyChanged 事件将被添加到MyClass

    class MyClass : INotifyPropertyChanged
    {
    }
    

    【讨论】:

    • 这适用于接口实现。我想从另一个类派生一个类,没有简单的方法。
    • @Kangkan:如果其他类有抽象方法,它的工作方式与接口相同。但是,如果它具有带有实现的虚拟方法,则您应该只覆盖您需要的那些。我不确定您缺少什么“简单方法”,但只需输入 override 和上面的空格,它就会为您提供可用的方法。您不需要全部覆盖它们。
    • 我想在我的类中添加额外的属性和方法,同时保留基类中的所有方法和属性。所以我希望将方法和属性实现为 base.method() 方式。
    • @Kangkan:当你从一个类派生时,你继承了它的所有方法和属性。您只需要覆盖要修改其行为的那些。你到底遇到了什么困难?
    • 所以。很多。时间。已保存。 :-D
    【解决方案2】:

    只需键入您要实现的接口,然后单击智能标签,将弹出一个上下文菜单,然后您可以选择实现接口或显式实现接口:

    所有要被覆盖的成员都将包含在一个代码区域内,该代码区域被命名以反映其用途。

    所有成员都会有一行抛出NotImplementedException

    【讨论】:

    • OP 谈论从基类派生类而不是实现接口。
    【解决方案3】:

    对于虚拟方法类型override,给一个空格,intellisense 会显示所有可以被继承的方法。

    【讨论】:

      【解决方案4】:

      当最初的问题被问到时,不要认为这存在,但至少从 VS 2013 开始,您可以自动为抽象方法和属性创建存根。只需右键单击抽象类名称(在您的类定义中)并选择“实现抽象类”。就像 CMS 展示的自动实现接口一样。

      【讨论】:

      • CMS 点击了“智能标签”,即他图片中 MyInterface 中 M 下方出现的小框。
      【解决方案5】:

      正如其他人所提到的,智能标记(通过Ctrl+.Alt+Shft+F10)将解决您的问题,但是Visual Studio 有一个烦人的选项,它会自动将生成的属性/方法包装成这样的区域:

      #region INotifyPropertyChanged members
      ...
      #endregion
      

      您可以转到Tools > Options > Text Editor > C# > Advanced 来启用此功能。有一个名为Implement Interface > Surround generated code with #region 的复选框。只需确保它未选中即可。

      【讨论】:

      • 我认为该区域很好,因为它将方法标记为与接口相关,并且还使整个组可折叠。
      【解决方案6】:

      目前自动实现抽象基类的微软官方文档在这里:

      https://docs.microsoft.com/en-us/visualstudio/ide/reference/implement-abstract-class

      【讨论】:

        【解决方案7】:

        也许您希望所有继承/实现类都实现一个新定义的抽象方法。

        1. 转到继承/实现类之一
        2. 使用智能标签菜单ctrl+.
        3. 实现抽象类/接口
        4. 注意弹出窗口“项目”或“解决方案”底部的选项

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-04
          • 2012-03-14
          • 2011-10-23
          • 1970-01-01
          • 1970-01-01
          • 2013-09-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多