Модераторы: 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.

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


 




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


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

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