Путь разработчика    

Код рефакторинга в C#


Содержание

Что такое рефакторинг? Это процесс улучшения читаемости, сложности и производительности кода путем изменения:

  • Внутренняя структура кода.
  • Внешнее поведение кода.

Рефакторинг помогает в:

  • Как изменить структуру кода
  • Как уменьшить длину кода
  • Как преодолеть сложности

Методы

Существует несколько способов эффективного использования рефакторинга над вашим кодом, эти методы уже доступны в Visual Studio:

  • Метод извлечения
  • Извлечь интерфейс
  • переименовывать
  • Продвигать переменную в параметр
  • Инкапсулировать поле
  • Изменение подписи
  • Создать метод заглушки

Метод извлечения

Метод извлечения - самый простой и лучший способ рефакторинга кода. Он разбивает ваш код на несколько небольших блоков или методов. Вы можете легко применить этот метод в своем сегменте кода.

1. Любая локальная переменная, которая определена перед выбранным кодом, но используется в ней, становится входным параметром.
2. Любая такая переменная типа локального значения, которая изменяется выбранным кодом, будет преобразована в параметр сравнения по ссылке (с использованием квалификатора ref).
3. Если выбранный код не использует какие-либо переменные-члены, он будет извлечен в статический метод.

Выберите любой блок кода из вашего сегмента кода.

Этот блок кода может быть любым условным оператором, таким как IF, может быть оператором цикла, подобным for, может быть методом или всем, что вам нужно реорганизовать внутри вашего сегмента кода.

Давайте обсудим, как рефакторинг с помощью Visual Studio с использованием метода извлечения:

  1. Вы можете выбрать фрагмент кода и щелкнуть правой кнопкой мыши и выбрать рефакторинг с помощью методов извлечения.
    Он заменит фрагмент кода новым методом, и новый метод будет создан автоматически с помощью этого фрагмента кода.

2.Вы можете выбрать фрагмент кода и перейти в Edit-> Refactor-> Extract Method.
Он заменит фрагмент кода новым методом, и новый метод будет создан автоматически с помощью этого фрагмента кода.

Переименование

Вы можете использовать рефакторинг для интеллектуального переименования переменной, параметра, метода или типа.
Инструмент рефакторинга будет различать буквальные имена и слова в комментариях и разные версии перегруженного метода.
То есть при переименовании метода вы получите возможность изменить имя этой конкретной версии метода (в его определении и всех его сайтах) или все перегруженные версии этого метода

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

Извлечение интерфейса:

Extract Interface создает определение интерфейса из общедоступных методов класса или структуры.

Возьмем пример класса Calculator.

C#

Чтобы извлечь интерфейс из класса Calculator, щелкните правой кнопкой мыши в любом месте определения класса и выберите «Извлечь интерфейс ... из меню« Рефакторинг ».
Появится диалоговое окно Extract Interface

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

Инкапсуляция полей:

Он позволяет создавать свойство вокруг члена класса. Вы можете использовать его для инкапсуляции публичного поля или для открытия частного поля как общедоступного.

Например, предположим, что вы хотите выставить переменную-член test_Number как общедоступное свойство:

C#

Поместите курсор на test_Number и выберите Encapsulate Field ... из меню Refactor. Это вызовет диалоговое окно Encapsulate Field.

В поле «Инкапсуляция» вы можете указать свойство, которое обертывает член, задает видимость свойства и инструктирует, как обновлять текущие ссылки на элемент.
EncapsulateField может распознавать общеупотребительное соглашение об именах имен элементов и генерировать из него соответствующее имя свойства.
Это означает, что если переменная-член имеет префикс test_ или просто _, поле Encapsulate будет опускать этот префикс, предлагая имя свойства.
Конечно, вы можете указать любое имя свойства, которое вам нравится. Вы также можете указать видимость свойства (общедоступную, внутреннюю, защищенную внутреннюю, защищенную, приватную) и что делать с внешними ссылками: вы можете заставить инструмент рефакторинга заменить все ссылки на поле (внутри типа или снаружи) ссылками к новому имуществу.
Несмотря на то, что для выбора ссылочного обновления по умолчанию установлено значение «Внешний», мы рекомендуем всегда выбирать «Все», поскольку это будет способствовать ослаблению внутренней связи в самом типе и упрощает обслуживание.
Любое бизнес-правило, введенное в действие потомством, будет автоматически применяться внутри этого типа.

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

C#

Вы можете использовать возможности инкапсуляции полей, чтобы сделать то, что подразумевает ее название. Например, вместо этой публичной переменной-члена:

C#

После использования рефакторинга инкапсуляции полей вы получите публичное свойство, называемое Number, а публичный член test_Number будет преобразован в частный член:

C#

Изменение подписи:

Рефакторинг позволяет вам изменить подпись метода путем добавления или удаления параметров, а рефакторинг позволяет изменить порядок параметров. Однако вы не можете изменить возвращаемый метод. Вы можете изменить подписи методов, индексаторов и конструкторов

Например, вы хотите изменить метод Add () в этом классе Calculator, чтобы использовать double вместо int parameters.

C#

Щелкните правой кнопкой мыши в любом месте метода и выберите «Изменить подпись метода» ... из всплывающего меню «Рефактор», чтобы открыть диалоговое окно «Подпись метода изменения»

Подпись метода изменения позволяет изменять, добавлять или удалять параметры метода.
Используйте диалог для изменения порядка параметров путем перемещения параметров вверх или вниз, добавления или удаления параметра и изменения типа и имени параметра

выберите параметр number1 и нажмите кнопку «Изменить ...», чтобы открыть диалоговое окно «Параметры». Измените тип параметра на двойной.
Обратите внимание, что диалоговое окно Parameter позволяет вам изменить тип только на один из заданных типов C#, например int или string

После применения изменения подписи вам необходимо вручную изменить возвращаемый тип метода Add (), чтобы удвоить

Объемное пространство и расширения:

окружение и расширения - это автоматизация ввода кода, а не компоновка кода и структура
Surround с созданием шаблона с держателями пустых мест для обычно используемых операторов (например, foreach или обработка исключений) вокруг выделенного раздела кода.
Важно понимать, что Kill () это не то же самое, что Dispose (). Kill () обрабатывает поток выполнения, такой как завершение работы приложения или своевременное завершение потоков, тогда как Dispose () обслуживает память и управление ресурсами и распоряжается другими ресурсами, которые может иметь класс WorkerThread.
Единственная причина, по которой у вас может быть вызов Dispose () Kill (), является непредвиденным в случае, если клиентский разработчик забывает это сделать

Функция Expand внедряет код шаблона на месте.
Когда вы используете Expand с контрольными инструкциями, такими как «Для каждого», нет необходимости окружать существующий код, он просто расширит оператор foreach, где вам нужно заполнить пробелы.

 
Источник: http://www.csharpstar.com/refactoring-code-in-c/



Отзывы (через аккаунты в социальных сетях Вконтакте или Facebook):

Оставить отзыв с помощью аккаунта ВКонтакте:

Оставить отзыв с помощью аккаунта FaceBook:

Как получить разрешение экрана в C#

Обычно монитор отображает 96 логических (или «условных») точек на дюйм (dpi), но это не всегда хорошая идея чтобы принять это значение. Когда этот пример н...

18 07 2019 11:16:24

Выполнять бинарное усиление контраста интерактивно в C#

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

17 07 2019 22:22:58

Как вычислить и выделить значения DataGridView в C#

В этом примере показано, как вычислять и выделять значения DataGridView во время выполнения. Он использует следующий код для инициализации элемента управле...

16 07 2019 5:18:32

Каковы различия между ArrayList и Vector в Java?

Java ArrayList и Vector реализуют интерфейс List и поддерживают порядок вставки. Но между ArrayList и Vector есть некоторые отличия. Java ArrayList и Vecto...

15 07 2019 18:22:50

Нечеткие линии для рисования теней в C#

Один из способов рисования теней на C# - рисовать объект, сдвинутый вниз и вправо, светло-серого цвета, как показано слева на рисунке выше. Это работает до...

14 07 2019 21:32:16

Разница между capacity() и size() вектора в Java

Разница между capacity() и size() в Java.util.Vector заключается в том, что size() - это количество элементов, которые в настоящее время удерживаются, а ca...

13 07 2019 7:37:17

Как создать таблицу Excel в C#

В этом примере используется следующий код для создания диаграммы Excel в новой книге. Код начинается с создания объекта приложения Excel. Он использует мет...

12 07 2019 10:11:17

Программирование для Android 5 (Денис Колисниченко)

Рассмотрены все основные аспекты создания приложений для платформы Android 5 (API 21): установка необходимого программного обеспечения (JDK, Eclipse и Andr...

11 07 2019 12:53:58

jQuery Mobile. Разработка приложений для смартфонов и планшетов (Максимилиано Фиртман)

Рассмотрено использование фреймворка jQuery Mobile для создания гибких мультиплатформенных приложений для различных мобильных устройств (iPad, Kindle Fire,...

10 07 2019 22:28:59

Выделение полигонов и полилиний в программе WPF с использованием C#

WPF позволяет вам делать всевозможные интересные вещи, которые намного сложнее в приложениях Windows Forms. Однако иногда, как в этом примере, это делает п...

09 07 2019 15:59:40

Получение писем с сервера POP3 в Python

Протокол почтового отделения версии 3 (POP3) - это стандартный почтовый протокол, используемый для приема электронной почты с удаленного сервера на локальн...

08 07 2019 14:10:59

Switch в Java Синтаксис и примеры

Оператор switch используется для выполнения различных действий на основе разных условий. Оператор switch Java работает с байтовыми, короткими, char и int п...

07 07 2019 4:17:50

Программирование под Android. 2-е изд. (Зигард Медникс, Лайрд Дорнин, Блэйк Мик)

В этой книге подробно рассказано о последних наработках в области программирования для Android. Тщательно изучив ее, вы научитесь создавать современные пол...

06 07 2019 23:17:51

Создание, чтение и запись текстового файла в C#

В этой статье мы напишем программу в C# для создания, чтения и записи текстового файла. Обычно есть два режима доступа к файлам: текстовый и двоичный. В те...

05 07 2019 13:44:42

Сохранение цветовой палитры в настройках программы на C#

Пример Сделать постоянную цветовую палитру в C# показывает, как программа может использовать настройки для сохранения и восстановления цветовой палитры. Пр...

04 07 2019 4:48:44

1С:Предприятие 8.0. Управление торговлей (В.Григорьева)

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

03 07 2019 10:15:29

Увеличьте и прокрутите изображение, нарисованное на C#

Эта программа позволяет масштабировать и прокручивать изображение, нарисованное программой. Программа содержит Panel с AutoScale, установленным в true. Вну...

02 07 2019 23:31:30

Легко передавать текст в программе WPF с использованием C#

Пример Рендеринг текста в программе WPF с использованием C# объясняет, как рисовать текст в коде WPF. В этом примере используется следующий метод расширени...

01 07 2019 2:54:37

Перемещение элементов управления формы в C#

В этом примере показано, как обрабатывать элементы управления различными типами в форме. Класс Control определяет свойство Controls, которое представляет с...

30 06 2019 7:20:51

If, else, case в Bash

В Bash, If утверждения очень полезны.  В этом разделе нашего урока вы узнаете, как вы можете использовать, If, else, elif, case инструкции в ваших сценариях Bash....

29 06 2019 13:27:14

Путь установки для Python

Windows позволяет постоянно настраивать переменные среды как на уровне пользователя, так и на уровне системы или временно в командной строке.  Чтобы запусти...

28 06 2019 10:32:30

Установите пиксели в растровом файле WPF в C#

В этом примере показано, как вы можете манипулировать пикселями в растровом файле WPF. Одна из вещей, которые мне меньше всего нравятся в WPF, - это то, ка...

27 06 2019 10:15:51

Самый простой и легкий язык программирования

Какой самый простой и легкий язык программирования? Программирование в наше время стало одним из самых перспективных занятий для молодых людей....

26 06 2019 6:36:36

Работа с PlayerPrefs в Unity 5 и выгрузка данных из них

В этом уроке мы разберем, что такое PlayerPrefs,где они хранятся и как работать с PlayerPrefs в Unity 5, а так же выгрузим из них данные....

25 06 2019 3:20:26

Может ли класс верхнего уровня быть закрытым или защищенным в Java

Нет. Класс верхнего уровня как закрытый был бы совершенно бесполезен, потому что ничто не имело бы к нему доступа. Если класс верхнего уровня объявлен как...

24 06 2019 4:55:12

Используйте двойную буферизацию, чтобы предотвратить мерцание при рисовании на C#

Пример Нарисуйте цветную кривую бабочки в C# показывает, как рисовать красочную кривую бабочки. Не упоминая об этом, я использовал двойную буферизацию в эт...

23 06 2019 22:37:26

Актуальные языки программирования

Какие актуальные языки программирования? Программирование все еще остается одной из самых востребовательных сфер деятельности. Именно здесь люди получают самые большие зарплаты, имеют весьма внушительные перспективы для карьерного роста...

22 06 2019 18:45:26

Преобразование файлов RTF и TXT в файлы DOCX в C#

Когда вы вводите имена входных и выходных файлов и нажмите « Конвертировать», программа использует следующий код, чтобы открыть файл и сохранить его в новом...

21 06 2019 8:31:40

Методы расширения прямоугольника в C#

В этом примере показано, как добавить методы расширения прямоугольника в структуры Rectangle и RectangleF. Структуры Rectangle и RectangleF имеют несколько...

20 06 2019 8:40:33

Что такое фильтр ввода-вывода и как его использовать в Java?

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

19 06 2019 8:36:59

Как создать строку Java из содержимого файла?

И Л И Использование класса сканера Следующий код Java прочитает весь файл в String. Пример Примечание: useDelimiter ("\ Z") задает разделитель в конце файла...

18 06 2019 17:21:11

Eclipse

Eclipse — бесплатная IDE модульных кроссплатформенных приложений. В первую очередь служит для разработки расширений, в чем и заключается главное её преимущ...

17 06 2019 13:55:25

Смотрите, где парабола и гипербола пересекаются в C#

В этом примере показано, как пересекаться парабола и гипербола. Предыдущий пример из четырех частей здесь , здесь < / a>, здесь , и здесь объясняет, как на...

16 06 2019 14:41:37

Отображение масштабируемой карты с горячими точками в C#

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

15 06 2019 15:23:17

Получить информацию о формате даты для локали компьютера в C#

Объект System.Globalization namespace's InstalledUICulture предоставляет множество статических методов, предоставляющих информацию о численном, дате и врем...

14 06 2019 7:28:37

Разница между capacity() и size() вектора в Java

Разница между capacity() и size() в Java.util.Vector заключается в том, что size() - это количество элементов, которые в настоящее время удерживаются, а ca...

13 06 2019 21:55:13

Среда разработки Xcode

Xcode – IDE под Mac OS от Apple. Распространяется бесплатно через App Store. Благодаря свободному набору компиляторов данная среда разработки может работат...

12 06 2019 15:40:43

Перемещение окна с названием, которое соответствует шаблону в C#

Пример Установите размер и положение другого приложения в C# использует функцию API FindWindow, чтобы найти окно с данным заголовком. К сожалению, FindWind...

11 06 2019 16:20:15

Переопределение WndProc, чтобы увидеть, когда пользователь нажимает любой элемент управления на форме в C#

Метод WndProc формы обрабатывает сообщения, отправленные в форму операционной системой Windows. Это чрезвычайно важный метод, который позволяет формам пере...

10 06 2019 13:50:58

Перезапустите диспетчер очереди печати в C#

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

09 06 2019 11:22:54

Как работает тернарный оператор на Python?

Тернарные операторы более широко известны как условные выражения в Python, которые оценивают что-то, основанное на истинном состоянии или нет. Он просто по...

08 06 2019 1:40:34

Как программировать на Visual C# 2012 (Пол Дейтел, Харви Дейтел)

Эта книга, выходящая уже в пятом издании, является одним из самых популярных в мире учебников по программированию на платформе Microsoft .NET на языке Visu...

07 06 2019 0:43:42

Почему Java не поддерживает указатели?

Большинство исследований согласны с тем, что указатели являются одной из основных функций, которые позволяют разработчикам вводить ошибки в свой код. Когда...

06 06 2019 1:35:56

Создание вашей первой программы на Python

Запуск Pytthon Interpreter После установки интерпретатор python живет в установленной директории. На компьютерах Windows установка Python обычно помещается...

05 06 2019 15:27:20

Выполнять действия в зависимости от дня недели в C#

Когда программа запускается, она использует следующий код для отображения другого сообщения двумя разными способами для каждого дня недели. Программа запус...

04 06 2019 6:23:31

Установить положение видео с помощью полосы прокрутки с помощью WPF в C#

Пример Управление видео с помощью WPF MediaElement в C# позволяет вам установить положение видео несколькими способами. Вы можете использовать кнопки Next...

03 06 2019 3:43:55

Операции Java LinkedList

Связанные списки относятся к простейшим и наиболее распространенным структурам данных. Массивы и связанные списки аналогичны, так как они хранят коллекции...

02 06 2019 11:18:56

Нарисуйте анимированный эпитрохоид в C#

В этом примере показан один из способов рисования анимированного эпитрохоида. ( См. Пример Нарисуйте эпитрохоид в C# для объяснения того, как нарисуйте эпит...

01 06 2019 8:34:17

Delphi 6. Учебный курс (В. В. Фаронов)

В книге "Delphi 6. Учебный курс" даются начальные сведения по системе программирования Delphi, разработанной американской корпорацией Borland International...

31 05 2019 14:50:24

JavaScript. Подробное руководство (Дэвид Флэнаган)

Пятое издание бестселлера "Javascript. Подробное руководство" полностью обновлено. Рассматриваются взаимодействие с протоколом HTTP и применение технологии...

30 05 2019 14:25:31

Что подразумевается под анонимным классом в Java?

Анонимный класс в Java - это класс, которому не присвоено имя, и объявляется и создается в одном выражении. Анонимный класс обычно используется на платформ...

29 05 2019 23:38:42

Нарисуйте цветное колесо в C#

В программе используется PathGradientBrush, чтобы заполнить цветовое колесо цветовыми образцами. Рисование колеса в основном автоматическое, но прикладывае...

28 05 2019 15:49:42

Позвольте пользователю писать на PictureBox в C#

Класс Graphics предоставляет метод DrawLines, который рисует ряд связанных строк, который иногда называют полилинией. Эта программа позволяет пользователю...

27 05 2019 1:10:38

Преимущества и недостатки JavaScript

Как и все языки компьютера, JavaScript имеет определенные преимущества и недостатки. Преимущества JavaScript: Быстрый для конечного пользователя: сценарий...

26 05 2019 2:59:33

Почему Java не поддерживает указатели?

Большинство исследований согласны с тем, что указатели являются одной из основных функций, которые позволяют разработчикам вводить ошибки в свой код. Когда...

25 05 2019 9:49:43

Математические функции Python

Функции могут делать что угодно, но их основной шаблон использования принимает параметры и возвращаемые значения . Математический модуль предоставляет неко...

24 05 2019 13:51:35

Класс FileWriter в Java

FileWriter - это представление символа Java.io. Это означает, что он может использоваться для написания символов. Он расширяет OutputStreamWriter, который...

23 05 2019 10:57:12

Что такое классы-оболочки в Java

Как сказано в названии, класс-оболочка обертывает (охватывает) вокруг типа данных и дает ему вид объекта. Они используются для преобразования любого примит...

22 05 2019 7:43:24

Сделайте бесконечную серию меню в C#

Во время разработки я дал программе главное меню Инструменты с пунктом меню « Инструменты». Оба эти пункта меню используют следующий DropDownOpening обработ...

21 05 2019 8:28:27

Преобразование строки в массив символов в C#

В этой статье мы напишем программу в C# для преобразования String в массив символов.   Источник: http://www.csharpstar.com/convert-string-to-character...

20 05 2019 17:16:48

Программирование на Java

Сокет - одна из самых фундаментальных технологий программирования компьютерной сети. Это способ подключения двух узлов в сети для связи друг с другом. Прог...

19 05 2019 20:13:40

MySQL 5.0. Библиотека программиста (Виктор Гольцман)

Эта книга предназначена для всех, кто желает освоить С У Б Д MySQL. Для ее чтения вам не нужны никакие специальные знания – достаточно быть пользователем Wind...

18 05 2019 12:17:28

Сделать класс фракции в C#

Класс Fraction представляет рациональные числа с использованием дробей, по крайней мере, до тех пор, пока числители и демониторы не станут слишком большими...

17 05 2019 22:35:30

Заменить текст, соответствующий шаблону в C#

В этом примере используется следующий код для замены текста, соответствующего шаблону в строке. Этот код создает объект Regex, передавая его конструктору ш...

16 05 2019 17:45:28

Каковы функции help() и dir() разные?

В Python help() - это супер полезная встроенная функция, которая может быть использована для возврата документации Python для конкретного объекта, метода,...

15 05 2019 23:31:11

Метод Substring() в Java

Подстрока является частью строки. Метод String substring() Java String возвращает новый строковый объект из данной строки. Синтаксис String str = "Java Str...

14 05 2019 15:20:15

Нарисуйте кривую с резко очерченными цветами в C#

Сообщение Нарисуйте кривую с несколькими цветами в C# показывает, как вы можете рисовать кривую, которая постепенно меняется от одного цвета к другому, ког...

13 05 2019 23:15:19

Что такое отказобезопасные и отказоустойчивые итераторы в Java

Неуправляемые итераторы Fail-Fast iterators, возвращенные большинством типов коллекций, не переносят каких-либо структурных изменений в коллекции, итерации...

12 05 2019 6:47:56

Сделайте значки приложений приложений Windows Forms на соответствующих размерах в C#

Установка значка формы проста. Просто выберите форму в редакторе форм и установите ее свойство Icon. Windows использует этот значок разными способами. Напр...

11 05 2019 9:50:36

Перетаскивание текста в C#

В этом примере показано, как позволить программе перетаскивать текст как между его элементами управления, так и с помощью элементов управления перетаскиван...

10 05 2019 14:43:40

StringTokenizer в Java

Класс StringTokenizer пакета Java.util позволяет приложению разбивать или разбивать строку на мелкие части с помощью определенного разделителя (пробел явля...

09 05 2019 17:57:24