Refaktoryzacja wyodrębniania metody (C#)
Metoda Extract jest przeróbek operacją, która zapewnia łatwy sposób, aby utworzyć nową metodę z fragmentu kodu w istniejącego elementu członkowskiego.
Za pomocą Ekstraktu metodą, można utworzyć nową metodę po wyodrębnieniu wybór kodu od wewnątrz bloku kodu istniejącego elementu członkowskiego.Metoda nowe, wyodrębnione zawiera wybranego kodu i istniejącego członka wybranego kodu jest zastępowany wywołanie nowej metody.Przekształcając fragment kodu własną metodę pozwala szybko i dokładnie reorganizować kod dla lepszego ponownego użycia i czytelności.
Metoda Extract ma następujące zalety:
Zachęca kodowania najlepszych praktyk przez podkreślając dyskretna metody wielokrotnego użytku.
Zachęca, kodeks dobrej organizacji self-documenting.
Gdy nazwy opisowe są używane, wysokiego poziomu metod można Dowiedz się więcej jak serii komentarze.
Zachęca do utworzenia drobniejsze średnioziarnistego metod, aby uprościć przesłanianie.
Zmniejsza duplikacji kodu.
Aby użyć metody ekstraktu
Tworzy aplikację konsoli o nazwie ExtractMethod, a następnie zastąpić Program z poniższym kodem przykładowym.
class A { const double PI = 3.141592; double CalculatePaintNeeded(double paintPerUnit, double radius) { // Select any of the following: // 1. The entire next line of code. // 2. The right-hand side of the next line of code. // 3. Just "PI *" of the right-hand side of the next line // of code (to see the prompt for selection expansion). // 4. All code within the method body. // ...Then invoke Extract Method. double area = PI * radius * radius; return area / paintPerUnit; } }
Zaznacz fragment kodu, który chcesz wyodrębnić:
double area = PI * radius * radius;
Na to menu, kliknij przycisk Ekstraktu metodą.
Ekstraktu metodą pojawi się okno dialogowe.
Alternatywnie, można również wpisać skrót klawiaturowy CTRL + R, M, aby wyświetlić Ekstraktu metodą okno dialogowe.
Można również przyciskiem wybranego kodu, wskaż polecenie to, a następnie kliknij przycisk Wydzielenie metody do wyświetlania Wydzielenie metody okno dialogowe.
Określ nazwę dla nowej metody, takie jak CircleArea, Nową nazwę metody pole.
Wyświetla podgląd nowy podpis metody, pod Podgląd podpis metody.
Click OK.
Uwagi
Kiedy używać Wydzielenie metody polecenie dodaje się nową metodę po członek źródłowy w tej samej klasie.
Typy częściowe
Jeśli klasa jest typu częściowego, następnie Ekstraktu metodą generuje nową metodę natychmiast po członek źródłowy.Metoda Extract Określa podpis nowej metody, Tworzenie statycznej metody, gdy żadne dane wystąpienie odwołuje się kod w nowej metody.
Parametry typu rodzajowego
Podczas wyodrębniania metody, która zawiera parametr typu rodzajowego nieograniczony wygenerowany kod nie spowoduje dodanie ref modyfikator do tego parametru, chyba że wartość jest przypisany do niego.Jeśli wyekstrahowana metoda będzie wspierać typy odwołań jako argument typu rodzajowego, a następnie należy ręcznie dodać ref modyfikator do parametru w podpisie metody.
Metody anonimowe
Jeśli próby wyodrębnić część anonimowe metody, która zawiera odwołanie do zmiennej lokalnej, która jest zadeklarowana albo odwołanie do poza metodą anonimową następnie Visual Studio ostrzeżenie o potencjalnych semantyczne zmian.
Gdy metody anonimowej używa wartości zmiennej lokalnej, wartość jest uzyskiwana w momencie utworzenia metody anonimowej jest wykonywany.Gdy metody anonimowej jest wyodrębniany do innej metody, wartość zmiennej lokalnej jest uzyskane w momencie wywołania metody wyodrębnione.
Poniższy przykład ilustruje tę zmianę semantyczne.Jeśli ten kod jest wykonywany, następnie 11 zostanie wydrukowany na konsoli.Jeśli korzystasz z Ekstraktu metodą wyodrębnić regionu kod, który jest oznaczony przez komentarzy do kodu do własnej metody i następnie wykonać kod refactored, 10 zostanie wydrukowany na konsoli.
class Program
{
delegate void D();
D d;
static void Main(string[] args)
{
Program p = new Program();
int i = 10;
/*begin extraction*/
p.d = delegate { Console.WriteLine(i++); };
/*end extraction*/
i++;
p.d();
}
}
Aby uniknąć tej sytuacji, należy zmiennych lokalnych, które są używane w polach anonimowe metody klasy.