Как сделать рефакторинг в visual studio
Генерация кода методом перетащить и отпустить (drag-and-drop)
Почти каждое действие, выполненное над диаграммой классов, приводит к изменению исходного кода и, по существу, представляет собой определенный уровень генерации кода. Мы уже писали о многих таких изменениях в предыдущих статьях, например, о добавлении свойства или метода в окне Class Details.
Однако некоторые более сложные действия, связанные с генерацией кода, можно выполнить, манипулируя диаграммой классов. Как уже упоминалось ранее, с помощью соединителя Inheritance можно установить отношение наследования между базовым и производным классами. При этом файл кода производного класса обновляется, отражая внесенные изменения. Но если базовый класс является абстрактным, как, например, класс Product на рисунке ниже, то надстройка Class Designer может выполнить дополнительный анализ и генерацию кода. Если базовый класс является абстрактным и содержит абстрактные члены, то они автоматически реализуются в производных классах. Это показано на рисунке справа, где абстрактные свойства Description, Price и SKU были добавлены в класс Book. Метод GetInventory() не был реализован, потому что не был помечен как абстрактный.
Соединитель Inheritance можно использовать еще в одной операции, которая приводит к автоматической генерации кода. На рисунке ниже, слева, в диаграмму был добавлен интерфейс ICrudActions. Когда соединитель Inheritance перетаскивается из класса в интерфейс, все члены интерфейса реализуются в классе:
Следующий пример содержит код, сгенерированный, когда интерфейс ICrudActions был добавлен в класс Book:
Генерация кода с помощью технологии IntelliSense
Доступ к остальным функциям, связанным с генерацией кода с помощью надстройки Class Designer, обеспечивает подменю, имеющее довольно странное имя IntelliSense. Поскольку эти функции применяются только к классам, это меню становится видимым только тогда, когда разработчик выбирает какой-нибудь обычный или абстрактный класс на диаграмме.
В этом меню доступны две функции генерации кода: Implement Abstract Class и Override Members. Функция Implement Abstract Class гарантирует, что все абстрактные члены из базового класса будут реализованы в производном классе. Для того чтобы получить доступ к этому классу, необходимо щелкнуть правой кнопкой мыши на производном классе, выбрать команду IntelliSense, а затем команду Implement Abstract Class.
Подобное делает и функция Override Members, которая используется для того, чтобы выбирать подлежащие замещению открытые свойства или методы в базовом классе. Для доступа к этой функции необходимо щелкнуть правой кнопкой мыши на производном классе, выбрать команду IntelliSense, а затем команду Override Members. Диалоговое окно, показанное на рисунке ниже, содержит базовые классы, а также свойства и методы, которые еще не были замещены.
Рефакторинг с помощью надстройки Class Designer
В статье "Рефакторинг кода" мы видели, как система Visual Studio поддерживает рефакторинг кода с помощью окна редактирования кода. Надстройка Class Designer тоже имеет много функций, связанных с рефакторингом при работе с сущностями на диаграмме классов.
Для того чтобы получить доступ к функции рефакторинга в надстройке Class Designer, необходимо щелкнуть правой кнопкой мыши на сущности или на любом из ее членов и выбрать команду из меню Refactor. В этом меню доступны следующие функции рефакторинга:
Rename Types and Type Members
Переименовывает тип или его член на диаграмме классов или в окне Properties. Переименование типа или его члена приводит к изменениям всех фрагментов кода, где ранее встречалось его старое имя. Можно даже убедиться, что эти изменения распространяются также на все комментарии и статические строки.
Encapsulate Field
Быстро создает новое свойство на основе существующего поля и аккуратно обновляет код, добавляя в него ссылки на новое свойство.
Изменяет порядок следования параметров метода в типе или удаляет параметр из метода.
Разработчик может извлекать члены типа в новый интерфейс. Эта функция позволяет выбирать только то подмножество членов, которое необходимо выделить в новый интерфейс.
Для того чтобы копировать и перемещать члены между типами, можно также использовать стандартные операции Cut, Сору и Paste, предусмотренные в системе Windows.
Source code refactoring can improve the quality and maintainability of your project by restructuring your code while not modifying the runtime behavior. Visual Studio Code supports refactoring operations (refactorings) such as Extract Method and Extract Variable to improve your code base from within your editor.
For example, a common refactoring used to avoid duplicating code (a maintenance headache) is the Extract Method refactoring, where you select source code that you'd like to reuse elsewhere and pull it out into its own shared method.
Refactorings are provided by a language service and VS Code has built-in support for TypeScript and JavaScript refactoring through the TypeScript language service. Refactoring support for other programming languages is provided through VS Code extensions that contribute language services. The UI and commands for refactoring are the same across languages, and in this topic we'll demonstrate refactoring support with the TypeScript language service.
Code Actions = Quick Fixes and refactorings
In VS Code, Code Actions can provide both refactorings and Quick Fixes for detected issues (highlighted with green squiggles). An available Code Action is announced by a lightbulb near the source code when the cursor is on a squiggle or selected text region. Clicking on the Code Action lightbulb or using the Quick Fix command ⌘. (Windows, Linux Ctrl+. ) will display Quick Fixes and refactorings.
If you'd just like to see refactorings without Quick Fixes, you can use the Refactor command ( ⌃⇧R (Windows, Linux Ctrl+Shift+R ) ).
Note: If you prefer to not see the Code Action lightbulb in your editor, you can disable lightbulbs with the editor.lightbulb.enable setting. You can still open Quick Fixes through Quick Fix command and ⌘. (Windows, Linux Ctrl+. ) keyboard shortcut.
Refactoring actions
Extract Method
Select the source code you'd like to extract and then click on the lightbulb in the gutter or press ( ⌘. (Windows, Linux Ctrl+. ) ) to see available refactorings. Source code fragments can be extracted into a new method, or into a new function at various different scopes. During the extract refactoring, you will be prompted to provide a meaningful name.
Extract Variable
TypeScript language service provides Extract to const refactoring to create a new local variable for the currently selected expression:
When working with classes, you can also extract a value to a new property.
Rename symbol
Renaming is a common operation related to refactoring source code and VS Code has a separate Rename Symbol command ( F2 ). Some languages support rename symbol across files. Press F2 and then type the new desired name and press Enter . All usages of the symbol will be renamed, across files.
Keybindings for Code Actions
The editor.action.codeAction command lets you configure keybindings for specific Code Actions. This keybinding, for example, triggers the Extract function refactoring Code Actions:
Code Action kinds are specified by extensions using the enhanced CodeActionProvided API. Kinds are hierarchical, so "kind": "refactor" will show all refactoring Code Actions, whereas "kind": "refactor.extract.function" will only show Extract function refactorings.
Using the above keybinding, if only a single "refactor.extract.function" Code Action is available, it will be automatically applied. If multiple Extract function Code Actions are available, we bring up a context menu to select them:
You can also control how/when Code Actions are automatically applied using the apply argument:
Valid values for "apply" :
- "first" - Always automatically apply the first available Code Action.
- "ifSingle" - Default. Automatically apply the Code Action if only one is available. Otherwise, show the context menu.
- "never" - Always show the Code Action context menu, even if only a single Code Action is available.
When a Code Action keybinding is configured with "preferred": true , only preferred Quick Fixes and refactorings are shown. A preferred Quick Fix addresses the underlying error, while a preferred refactoring is the most common refactoring choice. For example, while multiple refactor.extract.constant refactorings may exist, each extracting to a different scope in the file, the preferred refactor.extract.constant refactoring is the one that extracts to a local variable.
This keybinding uses "preferred": true to create a refactoring that always tries to extract the selected source code to a constant in the local scope:
Extensions with refactorings
You can find extensions that support refactoring by looking in the VS Code Marketplace. You can go to the Extensions view ( ⇧⌘X (Windows, Linux Ctrl+Shift+X ) ) and type 'refactor' in the search box. You can then sort by install count or ratings to see which extensions are popular.
Tip: The extensions shown above are dynamically queried. Click on an extension tile above to read the description and reviews to decide which extension is best for you.
Next steps
-
- Watch an introductory video on code editing features. - VS Code lets you move quickly through your source code. - Learn about debugging with VS Code.
Common questions
Why don't I see any lightbulbs when there are errors in my code?
Lightbulbs (Code Actions) are only shown when your cursor hovers over the text showing the error. Hovering over the text will show the error description, but you need to move the cursor or select text to see lightbulbs for Quick Fixes and refactorings.
Встроенная поддержка рефакторинга, предлагаемая системой Visual Studio 2013 для разработчиков проектов на языке VB, ограничена символическими методами Rename и Generate Method Stub.
Операции рефакторинга
Операция Extract Method
Например, в следующем сниппете, для того чтобы вынести условное логическое выражение в отдельный метод, необходимо выделить код и выбрать команду Extract Method из контекстного меню, появляющегося после щелчке правой кнопкой мыши:
На этом месте автоматически генерируется следующий код:
Операция Encapsulate Field
При рефакторинге часто требуется инкапсулировать в существующий класс некое свойство. Для этого предназначена операция Encapsulate Field. Чтобы выполнить это действие, следует выбрать переменную, которую требуется инкапсулировать, и выбрать соответствующую команду в контекстном меню. Это дает разработчику возможность указать свойство и выбрать место, в котором следует искать ссылку на него:
На следующем шаге после указания нового свойства следует определить, какие ссылки на переменную класса следует заменить ссылкой на новое свойство. Откроется окно предварительного просмотра по завершении поиска ссылок. В верхней панели окна размещено дерево, в котором указываются поля и методы, имеющие ссылки на данную переменную. Флажок, расположенный после каждой строки, указывает, следует ли выполнять замену. Выбрав строку в верхней части окна, необходимо установить на нее фокус в нижней панели. Как только будет обеспечена корректность каждой ссылки, инкапсуляция считается завершенной. Переменная класса устанавливается закрытой, а соответствующие ссылки обновляются.
Операция Extract Interface
По мере того как проект проходит этапы развития от прототипа на ранней стадии разработки до полной реализации или стадии роста, часто возникает необходимость выделить основные методы в виде интерфейса, доступного другим приложениям, или определить границы между непересекающимися системами. Прежде для этого приходилось копировать весь метод в новый файл и удалять его содержимое, оставляя лишь заглушку интерфейса. Операция рефакторинга Extract Interface позволяет извлечь интерфейс, используя любое количество методов в классе. При выполнении этой операции открывается диалоговое окно, показанное на рисунке ниже, которое позволяет пользователю выбрать метод, который он хочет включить в интерфейс. После того как разработчик сделает выбор, эти методы добавляются в новый интерфейс. Кроме того, новый интерфейс добавляется в исходный класс.
В следующем примере требуется извлечь в отдельный интерфейс первый метод:
После выбора команды Extract Interface из контекстного меню, появляющегося после щелчка правой кнопкой мыши, и выбора метода ShouldBeInInterface, подлежащего извлечению, в диалоговом окне Extract Interface (как показано на рисунке выше), в новом файле возникает новый интерфейс, а исходный файл обновляется следующим образом:
Операция Reorder Parameters
Иногда требуется переупорядочить параметры. Часто это делают по "косметическим" причинам, но эта операция может помочь повысить читабельность и иногда является необходимой при реализации интерфейсов.
Диалоговое окно Reorder Parameters dialog, показанное на рисунке ниже, позволяет переставлять параметры в списке в соответствии с требуемым порядком:
Как только требуемый порядок будет достигнут, пользователь может предварительно просмотреть результат. По умолчанию параметры в каждом вызове данного метода переставляются автоматически в соответствии с новым порядком. Диалоговое окно Preview, аналогичное показанному на рисунке, позволяет контролировать обновление вызовов метода.
Операция Remove Parameters
Удаление параметра из метода с помощью соответствующей операции рефакторинга значительно сокращает объем поиска ошибок компиляции, которые могут при этом возникнуть. Кроме того, эта операция очень полезна при многочисленных перегрузках метода, при которых удаление параметра не может порождать ошибки компиляции. В этом случае ошибка во время выполнения программы может возникнуть только по семантической, а не по синтаксической причине.
На рисунке ниже показано диалоговое окно Remove Parameters, которое используется для удаления параметров из списка параметров. Если параметр был удален непреднамеренно, его легко восстановить. Как указывает предупреждение, размещенное в этом диалоговом окне, удаление параметров часто приводит к неожиданным функциональным ошибкам, поэтому важно контролировать внесенные изменения. Для того чтобы оценить внесенные изменения, можно снова использовать окно предварительного просмотра.
Операция Rename
В отличие от поддержки переименования переменных в языке предусматривающей использование окна предварительного просмотра, в котором можно было подтвердить внесенные изменения, функции переименования в языке VB просто переименовывают все ссылки на данную переменную.
Операция Generate Method Stub
Когда разработчик пишет код, он может прийти к выводу, что ему нужен вызов метода, который еще не написан. Например, следующий сниппет иллюстрирует новый метод, который должен быть сгенерирован на более поздней стадии:
Разумеется, этот код порождает ошибку при сборке, поскольку вызываемый метод еще не определен. Используя операцию рефакторинга Generate Method Stub (доступную с помощью интеллектуального указателя в самом коде), можно сгенерировать заглушку метода. Как видно из следующего примера, заглушка метода содержит входные параметры и тип возвращаемого значения:
Меню Organize Usings
Разработчики проектов на языке VB не имеют возможности упорядочивать и удалять неиспользуемые инструкции Imports. Однако на закладке References в диалоговом окне Project Properties можно пометить пространства имен, которые должны быть импортированы в каждый исходный файл. Это позволит значительно сократить количество инструкций Imports. На этой странице можно также удалить ссылки на неиспользуемые сборки.
Очень полезно упорядочивать директивы using в алфавитном порядке, чтобы легко управлять пространствами имен, на которые они ссылаются. Для того чтобы не делать это вручную, нужно щелкнуть правой кнопкой мыши в окне редактора кода и выбрать команду Organize Usings --> Sort Usings.
Для того чтобы одновременно упорядочить директивы using и удалить неиспользуемые, достаточно щелкнуть правой кнопкой мыши в окне редактора кода и выбрать команду Organize Usings --> Remove and Sort.
Файлы шаблонного кода, предусмотренные в системе Visual Studio по умолчанию, содержат директивы using в начале файла за пределами блока пространства имен. Однако, согласно принципам стиля StyleCop, директивы using должны содержаться в блоке пространства имен. Операция Organize Usings распознает текущее расположение инструкций using в файле и оставляет их на месте.
Visual Studio предоставляет разные средства для написания, редактирования и рефакторинга кода.
IntelliSense
IntelliSense — это мощное средство завершения кода, которое предлагает символы и фрагменты по мере ввода кода. IntelliSense C++ в Visual Studio выполняется в реальном времени, анализируя вашу базу кода по мере ее обновления и предоставляя рекомендации. Чем больше символов вы вводите, тем меньше предлагается рекомендуемых результатов.
Некоторые символы пропускаются автоматически, чтобы еще больше сократить список результатов. Например, обращаясь извне класса к элементам его объекта, вы не сможете просмотреть частные элементы (по умолчанию) или защищенные элементы (если вы не в контексте дочернего класса). Вы можете настроить фильтрацию с помощью кнопок в нижней части.
Параметр Режим фильтрации списка членов определяет, какие виды автозавершения IntelliSense вы видите. По умолчанию для этого параметра установлено значение Нечеткий. Если при нечетком поиске соответствий у вас есть символ, который называется MyAwesomeClass, вы можете ввести MAC и найти класс в предложениях автозаполнения. Алгоритм нечеткого поиска задает минимальный порог, которому должны соответствовать символы, отображаемые в списке. При интеллектуальной фильтрации будут отображаться все символы, которые содержат подстроки, соответствующие тому, что вы ввели. При фильтрации по префиксу выполняется поиск строк, которые начинаются с введенных вами символов.
IntelliCode
IntelliCode — это средство IntelliSense на основе ИИ, которое помещает предположительно наиболее подходящий результат в верхнюю часть списка завершения. Для создания рекомендаций IntelliCode анализирует тысячи проектов с открытым кодом на GitHub, каждый из которых имеет более 100 звезд. В сочетании с контекстом кода список завершения используется для популяризации распространенных приемов работы.
Когда вы пишете код на C++, IntelliCode помогает вам с использованием таких популярных библиотек, как стандартная библиотека C++. Контекст кода используется для ранжирования наиболее полезных рекомендаций. В следующем примере функция-член size часто используется с функцией sort , поэтому она будет отображена в верхней части списка результатов.
В Visual Studio 2022 и Visual Studio 2019 IntelliCode предоставляется как дополнительный компонент в рабочей нагрузке Разработка классических приложений на C++ . Чтобы включить IntelliCode для C++, последовательно выберите Средства>Параметры>IntelliCode>Общие и задайте для параметра Базовая модель C++ значение Включено.
В Visual Studio 2017 IntelliCode предоставляется как расширение в Visual Studio Marketplace.
Прогнозная технология IntelliSense (экспериментальная функция)
Прогнозная технология IntelliSense — это экспериментальная функция, которая ограничивает число результатов, отображаемых в раскрывающемся списке IntelliSense, на основе контекста. Алгоритм применяет сопоставление типов, чтобы отобразить только те результаты, которые соответствует ожидаемому типу. Самый просто пример: если ввести int x = и вызвать раскрывающийся список IntelliSense, вы увидите только целые числа или функции, которые их возвращают. Эта функция отключена по умолчанию, так как она еще разрабатывается. Лучше всего она работает с глобальными символами; функции-члены еще не поддерживаются. Можно включить эту функцию, введя "прогнозный" в поле быстрого запуска или последовательно выбрав Средства>Параметры>Текстовый редактор>C/C++>Экспериментальные функции>Включить прогнозный IntelliSense.
Чтобы переопределить прогнозный IntelliSense и отобразить длинный список, нажмите клавиши CTRL+J. Если прогнозный IntelliSense включен, вызов CTRL+J удалит прогнозный фильтр. Повторное нажатие CTRL+J снова удалит фильтр специальных возможностей из результатов списка членов, где это применимо. Использование кнопки ([+]) в раскрывающемся списке IntelliSense аналогично нажатию клавиш CTRL+J. Наведите указатель на кнопку, чтобы увидеть подсказку о том, что сейчас отображается.
На предыдущем снимке экрана показаны несколько кнопок в раскрывающемся списке. Они позволяют включить фильтры IntelliSense для получения разных типов результатов:
- Переменные и константы
- Функции
- Типы
- Макросы
- Перечисления
- Пространства имен
Кнопка отображается, только если это применимо в текущем сеансе IntelliSense. Как правило, все кнопки одновременно не отображаются.
Шаблон IntelliSense
Когда курсор находится в определении шаблона, отображается строка шаблона. Она позволяет предоставлять аргументы примера шаблона для IntelliSense.
Щелкните значок , чтобы развернуть или свернуть панель шаблонов. Щелкните значок карандаша или дважды щелкните строку шаблона, чтобы открыть окно Редактирование.
Изменения, вносимые в окне, применяются непосредственно к исходному коду, поэтому результаты отображаются в реальном времени.
Строка шаблона может автоматически предлагать вероятные варианты на основе экземпляров в коде. Щелкните Добавить все существующие экземпляры, чтобы просмотреть список всех аргументов, которые использовались для создания экземпляра шаблона, во всей базе кода.
В окне в нижней части редактора отображаются расположение и аргументы каждого экземпляра.
Сведения в строке шаблона обрабатываются как связанные с конкретным пользователем. Они хранятся в папке .vs и не фиксируются в системе управления версиями.
Подчеркивание ошибок и быстрые исправления
Если редактор определяет ошибку в коде, он подчеркнет ее цветной волнистой линией. Красные волнистые линии указывают на код, который не будет скомпилирован. Зеленые волнистые линии указывают на другие проблемы, которые также могут быть серьезными. Вы можете открыть окно Список ошибок, чтобы просмотреть дополнительные сведения о проблемах.
Для некоторых типов ошибок (а также общих шаблонов создания кода) редактор будет предлагать быстрое исправление в виде лампочки, которая отображается, если навести указатель мыши на волнистую линию. Щелкните стрелку вниз, чтобы просмотреть предложения.
В следующем примере мы объявили vector , но определение не найдено, поэтому редактор предлагает включить требуемый файл заголовка:
Редактор также предлагает быстрые исправления для определенных функций рефакторинга. Например, если объявить класс в файле заголовка, Visual Studio предложит создать для него определение в отдельном файле .cpp.
Change tracking
При каждом изменении файла слева отображается желтая полоска, указывающая на то, что внесены несохраненные изменения. При сохранении файла полоска становится зеленой. Зеленая и желтая полоски отображаются, пока документ открыт в редакторе. Они представляют изменения, внесенные с момента последнего открытия документа.
Перенос кода
Строки кода можно перемещать вверх и вниз. Для этого выберите их, удерживая нажатой клавишу ALT и одну из клавиш со стрелками (вверх или вниз).
Вставка фрагментов кода
Фрагмент — это предварительно определенная часть исходного кода. Щелкните правой кнопкой мыши одну точку или выбранный текст для вставки фрагмента или размещения выбранного текста внутри фрагмента. На следующем рисунке показана процедура размещения выбранного оператора в цикле for. На последнем изображении желтым цветом выделены редактируемые поля, доступ к которым осуществляется с помощью клавиши TAB. Дополнительные сведения см. в статье Фрагменты кода.
Добавить класс
Добавьте новый класс из меню Проект или контекстного меню в обозревателе решений:
Можно также использовать мастер классов для изменения или просмотра существующего класса.
Рефакторинг
Рефакторинг доступен в контекстном меню быстрых действий. Или можно щелкнуть лампочку в редакторе. Некоторые также находятся в меню Правка > Рефакторинг. Эти функции включают перечисленные ниже.
Применение стиля кода с помощью ClangFormat и EditorConfig
В Visual Studio, начиная с версии 2017, реализована поддержка ClangFormat — популярной служебной программы для форматирования кода C++ на основе Clang/LLVM. Введите ClangFormat в поле быстрого запуска, чтобы настроить использование одного из следующих распространенных форматов:
- LLVM
- Chromium
- Mozilla
- WebKit
- Visual Studio
Вы также можете предоставить свой собственный файл .clang-format или _clang-format, чтобы применять пользовательские правила ко всем файлам кода на том же уровне или ниже.
Эти файлы легко использовать совместно с помощью системы управления версиями, следовательно, вы можете применять соглашения о написании кода во всей группе разработчиков.
Visual Studio, начиная с версии 2017, также поддерживает EditorConfig — программу, которая работает аналогичным образом. Однако ClangFormat имеет больше параметров стиля, чем EditorConfig, включая правила, относящиеся к C++. С помощью EditorConfig вы можете создавать и размещать файлы .editorconfig в разных папках вашей базы кода, чтобы определять стили кода для этих папок и подпапок. Файл .editorconfig заменяет все другие файлы .editorconfig в родительских папках, перезаписывая все параметры форматирования, которые можно настроить, выбрав Средства>Параметры. Вы можете задать правила, определяющие использование табуляции и пробелов, настраивающие размер отступов и многое другое. См. подробнее о создании переносимых настраиваемых параметров редактора с помощью EditorConfig.
Другие параметры форматирования
Поле быстрого запуска — это самый быстрый способ найти нужный параметр или средство. Поле расположено в главном меню. Просто начните ввод и список автоматического завершения отфильтрует результаты.
Чтобы задать параметры форматирования, например отступы, завершение скобок и раскраску, введите C++ Formatting (Форматирование C++) в поле быстрого запуска.
Другие параметры форматирования можно настроить в главном меню, выбрав Изменить>Дополнительно.
Параметры для включения и настройки функций редактирования C++ можно настроить в разделе Сервис>Параметры>Текстовый редактор>C/C++ . Чтобы получить дополнительную справку после выбора параметра, который вы хотите задать, выделите диалоговое окно и нажмите клавишу F1. Чтобы просмотреть общие параметры форматирования кода, введите Editor C++ в поле быстрого запуска.
Экспериментальные функции, которые могут присутствовать или отсутствовать в будущих версиях Visual Studio, можно найти в диалоговом окне экспериментальных функций C++ для текстового редактора. В Visual Studio, начиная с версии 2017, в этом диалоговом окне можно включить прогнозную технологию IntelliSense.
При создании приложений многие разработчики сначала заботятся об их функциональности, а когда она обеспечена, переделывают приложения таким образом, чтобы они были более управляемыми и удобочитаемыми. Это называется . Под рефакторингом понимается процесс переделки кода для повышения удобочитаемости и производительности приложений, а также обеспечения безопасности типов и приведения кода к такому виду, в котором он лучше соответствует рекомендуемым приемам объектно-ориентированного программирования. К счастью, теперь в Visual Studio 2010 можно достаточно хорошо автоматизировать этот процесс.
За счет использования меню Refactor (Рефакторинг), которое становится доступным при открытом файле кода, а также соответствующих клавиатурных комбинаций быстрого вызова, смарт-тегов (smart tags) и/или вызывающих контекстные меню щелчков, можно существенно видоизменять код с минимальным объемом усилий. В следующей таблице перечислены некоторые наиболее распространенные приемы рефакторинга, которые распознаются в Visual Studio 2010:
Чтобы увидеть процесс рефакторинга в действии, давайте модифицируем метод Main(), добавив в него следующий код:
Для этого выделите в окне редактора все содержащиеся внутри Main() операторы, кроме последнего вызова Console.ReadLine(), и щелкните на выделенном коде правой кнопкой мыши. Выберите в контекстном меню пункт Refactor --- Extract Method (Рефакторинг --- Извлечь метод).
В открывшемся далее окне назначьте новому методу имя MyConfigCUI():
После этого метод Main() станет вызывать новый только что сгенерированный метод MyConfigCUI(), внутри которого будет содержаться выделенный ранее код:
Нетрудно заметить, подобные мастера позволяют довольно легко производить рефакторинг кода не только на одной странице, но и во всем приложении. К числу других доступных возможностей относятся:
переименование методов, локальных переменных, полей и множества других элементов
извлечение методов из выделяемых фрагментов кода
извлечение интерфейсов на основе набора существующих членов типа
превращение локальных переменных в параметры
переименование или переупорядочивание параметров
Предлагаемые Visual Studio 2010 возможности рефакторинга представляют собой поистине замечательный способ для получения более чистого, удобочитаемого и лучше структурированного кода. :)
Читайте также: