Автоматически генерировать реализации методов базового класса - PullRequest
33 голосов
/ 02 апреля 2009

Есть ли в C # какой-либо ярлык для автоматической реализации методов виртуального и абстрактного базового класса в производном классе?

Ответы [ 7 ]

51 голосов
/ 02 апреля 2009

Для виртуальных методов вы можете ввести override и затем пробел. Intellisense должен предложить вам список вариантов.

Для абстрактных методов и свойств вы можете использовать смарт-тег на базовом классе или интерфейсе (также, Ctrl + . или Shift + Alt + F10 покажет меню смарт-тега) для создания конкретных элементов.

Например, в следующем фрагменте кода вы можете поместить каретку в конце INotifyPropertyChanged и нажать Ctrl + . , чтобы затем выбрать Интерфейс реализации, и PropertyChanged событие будет добавлено к MyClass:

class MyClass : INotifyPropertyChanged
{
}
22 голосов
/ 02 апреля 2009

Просто введите интерфейс, который вы хотите реализовать, и затем нажмите на смарт-тег, появится всплывающее контекстное меню, и затем вы можете явно выбрать либо интерфейс реализации, либо интерфейс реализации:

enter image description here

Все переопределяемые члены будут содержаться в пределах области кода, имя которой соответствует ее назначению.

У всех участников будет строка, которая бросает NotImplementedException.

4 голосов
/ 02 апреля 2009

Для виртуальных методов введите override , введите пробел и intellisense покажет вам все методы, которые могут быть унаследованы.

3 голосов
/ 21 мая 2014

Не думаю, что это существовало, когда задавался исходный вопрос, но, по крайней мере, начиная с VS 2013, вы можете автоматически создавать заглушки для абстрактных методов и свойств. Просто щелкните правой кнопкой мыши на имени абстрактного класса (в вашем определении класса) и выберите «Реализация абстрактного класса». Так же, как CMS показал с автоматически реализуемыми интерфейсами.

1 голос
/ 01 февраля 2012

Как уже упоминали другие, смарт-тег (через Ctrl+. и Alt+Shft+F10) решит вашу проблему, однако Visual Studio имеет раздражающую опцию, которая автоматически оборачивает сгенерированные свойства / методы в область, подобную этой:

#region INotifyPropertyChanged members
...
#endregion

Вы можете включить эту функцию, перейдя на Tools > Options > Text Editor > C# > Advanced. Есть флажок под названием Implement Interface > Surround generated code with #region. Просто убедитесь, что он не отмечен.

0 голосов
/ 28 февраля 2019

Возможно, вы хотите, чтобы все наследующие / реализующие классы реализовывали новый определенный абстрактный метод.

  1. Перейти к одному из классов наследования / реализации
  2. использовать меню смарт-тегов ctrl + .
  3. реализовать абстрактный класс / интерфейс
  4. ищите варианты внизу всплывающего окна "Проект" или "Решение" Smart tag Menu Pop Up
0 голосов
/ 01 июня 2018

Текущая официальная документация Microsoft для автоматической реализации абстрактного базового класса находится здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...