Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обзор операций рефакторинга в Visual Studio 2005, статья 
:(
    Опции темы
alir
Дата 11.3.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Частенько в общие вопросы кидают всевозможные статьи. Вот, думаю, сделаю это и я. smile Данный топик посвещается тем, кому влом ставить msdn и у кого проблемы с английским. И так...


Обзор операций рефакторинга в Visual Studio 2005.

• Promote Local Variable to Parameter
(перевод локальной переменной в параметр).

Данный метод служит для быстрого перевода переменных функций в параметры этой функции. Т.е. пусть имеется следующий код:
Код

    class TestRefactor
    {
        public void Method1()
        {
        int i = 0; //! (*)
        }
    }



Далее выделяем переменную i, вызываем операцию Promote Local Variable to Parameter и
получаем результат:
Код

    class TestRefactor
    {
        public void Method1(int i)
        {
           
        }
    }


! (*) – выделяемая переменная должна быть инициализирована, иначе студия не сможет ее сделать параметром. Данная проверка введена не случайно, а для поддержания концепции защищенного кода.


• Extract Method
(извлечение метода)

Этот метод необходим для разделения инициализации переменной в некоторой функции от кода работы с этой переменной. Т.е.:
Код

    class TestRefactor
    {
        int a = 1;

        public int Method1(int n)
        {
            for (int j = 1; j <= n; j++)
                a = a * j;

            return a;
       }
    }


Выделяем выражение цикла (работа с переменной) и вызываем функцию Extract Method. В результате получаем еще одну функцию:
Код

    class TestRefactor
    {
        int a = 1;

        public int Method1(int n)
        {
//работа с переменной
            for (int j = 1; j <= n; j++)
                Method2(j);  

            return a;
       }

        private int Method2(int j)
        {
//инициализация переменной
            return a = a * j;
        }
    }



• Encapsulate Field
(инкапсулирование поля)

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

class TestRefactor
    {
        private int width;
    }


Выбираем операцию Encapsulate Field и получаем:
Код

    class TestRefactor
    {
        private int width;

        public int Width
        {
            get { return width; }
            set { width = value; }
        }
    }



• Extract Interface
(извлечение интерфейса)

Данная операция создает новый файл с исходным кодом, содержащий интерфейс с методами выбранного класа(структуры, интерфейса), и автоматически добавляет его к проекту и добавляет наследование этого интерфейса классу (структуре).
Код

 //файл program2.cs
    class TestRefactor
    {
        public void Method1(string s) 
        { }
        public void Method2()
        { }
    }


Применяем операцию. В появившемся диалоговом окне прописываем имя будущего файла (интерфейса) и выбераем функции, которые будут содержаться в этом интерфейсе.
Код

    //файл program1.cs
    class TestRefactor : ConsoleApplication1.IProtoA
    {
        public void Method1(string s) 
        { }
        public void Method2()
        { }
    }


    //файл program2.cs
    using System;
    namespace ConsoleApplication1
    {
     interface IProtoA
       {
        void Method1(string s);
        void Method2();
       }
    }



• Rename
(переименование)

Очень простая и полезная операция! Суть ее в том, что если переименовать с помощью этой операции какое-либо поле (тип, свойство, именное пространство или метод), то оно будет переименовано во всем проекте и во всех его представлениях и не надо будет искать его по всему проекту, чтобы поменять имя.


• Remove Parametres
(удаление параметров)

Используется для удаление параметров из функции (делегата), причем удаляется наличие параметра при вызове функции. Т.е. пусть имеется:
Код

    class TestRefactor 
    {
        public void Method1(string s, int b)
        { }
    }



    class Program
    {
        static void Main(string[] args)
        {
            TestRefactor refac = new TestRefactor ();
            refac.Method1("слово", 5);
        }
    }


Ставим курсор на определение Method1, вызываем операцию Remove Parametres, указываем какой параметр удалить и получаем (например, удалим b):
Код

    class TestRefactor 
    {
        public void Method1(string s)
        { }
    }


    class Program
    {
        static void Main(string[] args)
        {
            TestRefactor refac = new TestRefactor ();

        //автоматически удаляется вызов 2-го параметра
            refac.Method1("слово");
        }
    }


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


• Recorder Parametres
(замена местами параметров)

Ну а эта последняя операция носит лишь условный характер, нежели полезный: параметры просто меняются местами. Т.е. первоначально:
Код

    class TestRefactor 
    {
        public void Method1(string s, int b)
        { }
    }



    class Program
    {
        static void Main(string[] args)
        {
            TestRefactor refac = new TestRefactor ();
            refac.Method1("слово", 5);
        }
    }


Далее ставим курсор на Method1, вызываем операцию, устанавливаем расстановку параметров и получаем (поменяем s с b):
Код

class TestRefactor 
    {
        public void Method1(int b, string s)
        { }
    }


    class Program
    {
        static void Main(string[] args)
        {
            TestRefactor refac = new TestRefactor ();
            refac.Method1(5, "слово");
        }
    }


P.S. Вот и все доступные операции рефакторинга в Visual Studio 2005. Надеимся в следущей
версии операций будет больше, и они будут более эффективные.

Это сообщение отредактировал(а) alir - 11.3.2006, 01:30
PM MAIL ICQ   Вверх
Exception
Дата 11.3.2006, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Вроде как, дополнительные покупаются у DevExpress smile
А как там реализовано, через смарт-теги? Или просто выделяешь и правой кнопкой мыши?
P.S. Можно и самому такие вещи писать. DevExpress предоставляет пакет DxCore, который необходим для работы, например, Refactor for VB 2005 и CodeRush. В нем есть и элементы, необходимые для написания rich-ui плагинов и даже шаблон проекта Visual Studio. Планирую на днях взглянуть на эту вещь более детально, как только закончу обзор LINQ (ждите smile ).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0436 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.