Код рефакторинга в C#
Содержание
Что такое рефакторинг? Это процесс улучшения читаемости, сложности и производительности кода путем изменения:
- Внутренняя структура кода.
- Внешнее поведение кода.
Рефакторинг помогает в:
- Как изменить структуру кода
- Как уменьшить длину кода
- Как преодолеть сложности
Методы
Существует несколько способов эффективного использования рефакторинга над вашим кодом, эти методы уже доступны в Visual Studio:
- Метод извлечения
- Извлечь интерфейс
- переименовывать
- Продвигать переменную в параметр
- Инкапсулировать поле
- Изменение подписи
- Создать метод заглушки
Метод извлечения
Метод извлечения - самый простой и лучший способ рефакторинга кода. Он разбивает ваш код на несколько небольших блоков или методов. Вы можете легко применить этот метод в своем сегменте кода.
1. Любая локальная переменная, которая определена перед выбранным кодом, но используется в ней, становится входным параметром.
2. Любая такая переменная типа локального значения, которая изменяется выбранным кодом, будет преобразована в параметр сравнения по ссылке (с использованием квалификатора ref).
3. Если выбранный код не использует какие-либо переменные-члены, он будет извлечен в статический метод.
Выберите любой блок кода из вашего сегмента кода.
Этот блок кода может быть любым условным оператором, таким как IF, может быть оператором цикла, подобным for, может быть методом или всем, что вам нужно реорганизовать внутри вашего сегмента кода.
Давайте обсудим, как рефакторинг с помощью Visual Studio с использованием метода извлечения:
- Вы можете выбрать фрагмент кода и щелкнуть правой кнопкой мыши и выбрать рефакторинг с помощью методов извлечения.
Он заменит фрагмент кода новым методом, и новый метод будет создан автоматически с помощью этого фрагмента кода.
2.Вы можете выбрать фрагмент кода и перейти в Edit-> Refactor-> Extract Method.
Он заменит фрагмент кода новым методом, и новый метод будет создан автоматически с помощью этого фрагмента кода.
Переименование
Вы можете использовать рефакторинг для интеллектуального переименования переменной, параметра, метода или типа.
Инструмент рефакторинга будет различать буквальные имена и слова в комментариях и разные версии перегруженного метода.
То есть при переименовании метода вы получите возможность изменить имя этой конкретной версии метода (в его определении и всех его сайтах) или все перегруженные версии этого метода
Например, чтобы переименовать тип Form1 в ClientForm, щелкните правой кнопкой мыши в любом месте вашего кода, где присутствует тип Form1 (в его определении или местах, где он используется) и выберите «Переименовать ...» в меню «Рефакторинг».
Извлечение интерфейса:
Extract Interface создает определение интерфейса из общедоступных методов класса или структуры.
Возьмем пример класса Calculator.
public abstract class Calculator { public int Add(int number1,int number2) { return number1+number2; } public int Subtract(int number1,int number2) { return number1-number2; } public virtual int Divide(int number1,int number2) { return number1+number2; } public abstract int Multiply(int number1,int number2); }
Чтобы извлечь интерфейс из класса Calculator, щелкните правой кнопкой мыши в любом месте определения класса и выберите «Извлечь интерфейс ... из меню« Рефакторинг ».
Появится диалоговое окно Extract Interface
Вы даже можете извлечь один интерфейс из определения другого, и в этом случае новый интерфейс будет помещен в новый файл, но исходное определение интерфейса не изменится.
Инкапсуляция полей:
Он позволяет создавать свойство вокруг члена класса. Вы можете использовать его для инкапсуляции публичного поля или для открытия частного поля как общедоступного.
Например, предположим, что вы хотите выставить переменную-член test_Number как общедоступное свойство:
public class MyClass { int test_Number; }
Поместите курсор на test_Number и выберите Encapsulate Field ... из меню Refactor. Это вызовет диалоговое окно Encapsulate Field.
В поле «Инкапсуляция» вы можете указать свойство, которое обертывает член, задает видимость свойства и инструктирует, как обновлять текущие ссылки на элемент.
EncapsulateField может распознавать общеупотребительное соглашение об именах имен элементов и генерировать из него соответствующее имя свойства.
Это означает, что если переменная-член имеет префикс test_ или просто _, поле Encapsulate будет опускать этот префикс, предлагая имя свойства.
Конечно, вы можете указать любое имя свойства, которое вам нравится. Вы также можете указать видимость свойства (общедоступную, внутреннюю, защищенную внутреннюю, защищенную, приватную) и что делать с внешними ссылками: вы можете заставить инструмент рефакторинга заменить все ссылки на поле (внутри типа или снаружи) ссылками к новому имуществу.
Несмотря на то, что для выбора ссылочного обновления по умолчанию установлено значение «Внешний», мы рекомендуем всегда выбирать «Все», поскольку это будет способствовать ослаблению внутренней связи в самом типе и упрощает обслуживание.
Любое бизнес-правило, введенное в действие потомством, будет автоматически применяться внутри этого типа.
Вы можете выбрать, хотите ли вы просмотреть изменения в ссылках и применить изменения. Результатом будет публичное свойство, которое обертывает участника:
public class MyClass { int m_Number; public int Number { get { return test_Number; } set { test_Number = value; } } }
Вы можете использовать возможности инкапсуляции полей, чтобы сделать то, что подразумевает ее название. Например, вместо этой публичной переменной-члена:
public class MyClass { public int test_Number; }
После использования рефакторинга инкапсуляции полей вы получите публичное свойство, называемое Number, а публичный член test_Number будет преобразован в частный член:
public class MyClass { private int test_Number; public int Number { get {...} set {...} } }
Изменение подписи:
Рефакторинг позволяет вам изменить подпись метода путем добавления или удаления параметров, а рефакторинг позволяет изменить порядок параметров. Однако вы не можете изменить возвращаемый метод. Вы можете изменить подписи методов, индексаторов и конструкторов
Например, вы хотите изменить метод Add () в этом классе Calculator, чтобы использовать double вместо int parameters.
public class Calculator { public int Add(int number1,int number2) { return number1+number2; } }
Щелкните правой кнопкой мыши в любом месте метода и выберите «Изменить подпись метода» ... из всплывающего меню «Рефактор», чтобы открыть диалоговое окно «Подпись метода изменения»
Подпись метода изменения позволяет изменять, добавлять или удалять параметры метода.
Используйте диалог для изменения порядка параметров путем перемещения параметров вверх или вниз, добавления или удаления параметра и изменения типа и имени параметра
выберите параметр number1 и нажмите кнопку «Изменить ...», чтобы открыть диалоговое окно «Параметры». Измените тип параметра на двойной.
Обратите внимание, что диалоговое окно Parameter позволяет вам изменить тип только на один из заданных типов C#, например int или string
После применения изменения подписи вам необходимо вручную изменить возвращаемый тип метода Add (), чтобы удвоить
Объемное пространство и расширения:
окружение и расширения - это автоматизация ввода кода, а не компоновка кода и структура
Surround с созданием шаблона с держателями пустых мест для обычно используемых операторов (например, foreach или обработка исключений) вокруг выделенного раздела кода.
Важно понимать, что Kill () это не то же самое, что Dispose (). Kill () обрабатывает поток выполнения, такой как завершение работы приложения или своевременное завершение потоков, тогда как Dispose () обслуживает память и управление ресурсами и распоряжается другими ресурсами, которые может иметь класс WorkerThread.
Единственная причина, по которой у вас может быть вызов Dispose () Kill (), является непредвиденным в случае, если клиентский разработчик забывает это сделать
Функция Expand внедряет код шаблона на месте.
Когда вы используете Expand с контрольными инструкциями, такими как «Для каждого», нет необходимости окружать существующий код, он просто расширит оператор foreach, где вам нужно заполнить пробелы.