Поделиться через


Переименовать рефакторинг (C#)

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

Примечание

При использовании системы управления версиями для среды разработки Visual Studio перед попыткой выполнить операцию рефакторинга "переименование" следует взять последнюю версию исходного кода.

Функция оптимизации "Переименование" доступна из следующих модулей среды разработки Visual Studio:

Функция

Поведение оптимизации в интегрированной среде разработки

Редактор кода

В редакторе кода операция рефакторинга "переименование" доступна при размещении курсора на символах кода определенного типа. Расположив курсор в таком месте, можно вызвать команду Переименование, нажав сочетание клавиш (CTRL + R, R) или выбрав команду Переименование в меню смарт-тегов, контекстном меню или меню Оптимизация.

Окно классов

При выборе идентификатора в представлении классов операция рефакторинга "переименование" доступна из контекстного меню и из меню Оптимизация.

Обозреватель объектов

При выборе идентификатора в обозревателе объектов операция рефакторинга "переименование" доступна только из меню Оптимизация.

Сетка свойств конструктора Windows Forms

В сетке свойств конструктора Windows Forms изменение имени элемента управления приводит к запуску операции переименования для этого элемента управления. Диалоговое окно Переименование при этом не открывается.

Обозреватель решений

В Обозревателе решений команда Переименование доступна в контекстном меню. Если выбранный файл с исходным кодом содержит класс, имя которого совпадает с именем файла, то эту команду можно использовать для одновременного переименования файла с исходным кодом и выполнения операции рефакторинга "переименование".

Например, при создании приложения по умолчанию, работающего под Windows, и переименовании файла Form1.cs в TestForm.cs имя файла с исходным кодом Form1.cs будет изменено на TestForm.cs, а класс Form1 и все ссылки на этот класс будут изменены на TestForm.

ПримечаниеПримечание
Команда Отменить (CTRL+Z) выполняет отмену только операции рефакторинга "переименование" в коде, а имя файла на исходное не меняет.

Если выбранный файл с исходным кодом не содержит класса, имя которого совпадает с именем файла, то команда Переименование в Обозревателе решений переименовывает только файл с исходным кодом, а операция рефакторинга "переименование" не выполняется.

Операции переименования

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

Символ кода

Операции переименования

Поле

Изменяет объявление и использования имени поля на новое имя.

Локальная переменная

Изменяет объявление и случаи использования имени переменной на новое имя.

Метод

Изменяет имя метода и все ссылки на этот метод на новое имя.

ПримечаниеПримечание
При переименовании метода расширения операция переименования распространяется на все экземпляры этого метода, находящиеся в области действия, независимо от того, используется этот метод расширения как статический метод или метод экземпляра.Дополнительные сведения см. в разделе Методы расширения (Руководство по программированию в C#).

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

Изменяет имя пространства имен на новое в его объявлении, во всех операторах using и во всех полных именах.

ПримечаниеПримечание
При переименовании пространства имен Visual Studio также обновляет свойство Пространство имен по умолчанию на странице ПриложениеКонструктора проектов.Это свойство невозможно сбросить, выбрав команду Отменить в меню Правка.Для сброса значения свойства Пространство имен по умолчанию необходимо изменить это свойство в Конструкторе проектов.Дополнительные сведения см. в разделе Страница "Приложение".

Свойство

Изменяет объявление и использования свойства на новое имя.

Type

Изменяет все объявления и все случаи использования типа на новое имя, включая конструкторы и деструкторы. Для разделяемых типов операция переименования распространяется на все части.

Чтобы переименовать идентификатор

  1. Создайте консольное приложение с именем RenameIdentifierи затем замените Program следующим примером кода.

    class ProtoClassA
    {
        // Invoke on 'MethodB'.
        public void MethodB(int i, bool b) { }
    }
    
    class ProtoClassC
    {
        void D()
        {
            ProtoClassA MyClassA = new ProtoClassA();
    
            // Invoke on 'MethodB'.
            MyClassA.MethodB(0, false);
        }
    }
    
  2. Расположите курсор на объявлении или вызове метода MethodB.

  3. В меню Оптимизация выберите пункт Переименовать. Откроется диалоговое окно Переименование.

    Кроме того, диалоговое окно Переименование можно открыть нажатием клавиши F2.

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

  4. В поле Новое имя введите MethodC.

  5. Установите флажок Поиск в комментариях.

  6. Нажмите кнопку ОК.

  7. В диалоговом окне Предварительный просмотр изменений нажмите кнопку Применить.

Чтобы переименовать идентификатор с помощью смарт-тегов

  1. Создайте консольное приложение с именем RenameIdentifierи затем замените Program следующим примером кода.

    class ProtoClassA
    {
        // Invoke on 'MethodB'.
        public void MethodB(int i, bool b) { }
    }
    
    class ProtoClassC
    {
        void D()
        {
            ProtoClassA MyClassA = new ProtoClassA();
    
            // Invoke on 'MethodB'.
            MyClassA.MethodB(0, false);
        }
    }
    
  2. В объявлении метода MethodB выполните на идентификаторе метода ввод символа или стирание назад. Под идентификатором появится подсказка для ввода смарт-тегов.

    Примечание

    Вызвать операцию рефакторинга "переименование" с помощью смарт-тегов можно только над объявлением идентификатора.

  3. Нажмите на клавиатуре сочетание клавиш SHIFT+ALT+F10 и затем нажмите клавишу СТРЕЛКА ВНИЗ, чтобы открыть меню смарт-тегов.

    – или –

    Проведите курсором мыши над подсказкой для ввода смарт-тегов, чтобы показать смарт-теги. Затем наведите курсор мыши на смарт-тег и щелкните клавишу СТРЕЛКА ВНИЗ для вывода на экран меню смарт-тегов.

  4. Выберите элемент меню Переименовать "<идентификатор1>" в "<идентификатор2>", чтобы вызвать операцию рефакторинга "переименование" без предварительного просмотра изменений в коде. Все ссылки на <идентификатор1> будут автоматически заменены на <идентификатор2>.

    – или –

    Выберите элемент меню Переименовать с предварительным просмотром, чтобы вызвать операцию рефакторинга "переименование" с предварительным просмотром изменений в коде. Откроется диалоговое окно Предварительный просмотр изменений.

Заметки

Переименование реализованных или переопределенных членов

В случае применения операции Переименование к члену, который реализует/переопределяет или который реализуется/переопределяется членами других типов, Visual Studio открывает диалоговое окно, в котором говорится о том, что выполнение операции переименования приведет к каскадному обновлению. Если нажать кнопку Продолжить, то подсистема оптимизации рекурсивно выполнит поиск и переименование всех членов базового и производных типов, которые связаны отношениями "реализация/переопределение" с переименовываемым членом.

В следующем примере кода есть члены, связанные отношением "реализация/переопределение".

interface IBase
{
    void Method();
}
public class Base
{
    public void Method()
    { }
    public virtual void Method(int i)
    { }
}
public class Derived : Base, IBase
{
    public new void Method()
    { }
    public override void Method(int i)
    { }
}
public class C : IBase
{
    public void Method()
    { }
}

В приведенном выше примере переименование метода C.Method() приводит к переименованию также метода Ibase.Method(), потому что метод C.Method() реализует метод Ibase.Method(). Затем подсистема оптимизации рекурсивно обнаруживает, что метод Ibase.Method() реализуется методом Derived.Method(), и переименовывает метод Derived.Method(). Подсистема оптимизации не переименовывает метод Base.Method(), потому что метод Derived.Method() не переопределяет метод Base.Method(). Подсистема оптимизации на этом останавливается, если флажок Переименовать перегруженные методы в диалоговом окне Переименование не установлен.

Если флажок Переименовать перегруженные методы установлен, то подсистема оптимизации переименовывает метод Derived.Method(int i), потому что он перегружает метод Derived.Method(), метод Base.Method(int i), потому что перегружен методом Derived.Method(int i), и метод Base.Method(), потому что он является перегрузкой метода Base.Method(int i).

Примечание

При переименовании члена, определенного в сборке, ссылка на которую включена в проект, в диалоговом окне поясняется, что это переименование приведет к ошибкам при выполнении построения.

Переименование свойств анонимных типов

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

var a = new { ID = 1};
var b = new { ID = 2};

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

var companyIDs =
    from c in companylist
    select new { ID = c.ID, Name = c.Name};

var orderIDs =
    from o in orderlist
    select new { ID = o.ID, Item = o.Name};

В приведенном выше коде переименование члена ID сведется к переименованию только одного случая использования имени ID, потому что типы companyIDs и orderIDs не имеют одинаковых свойств.

См. также

Ссылки

Анонимные типы (Руководство по программированию в C#)

Основные понятия

Рефакторинг (C#)