Methode extrahieren

Aktualisiert: November 2007

Methode extrahieren ist ein Umgestaltungsvorgang und bietet eine einfache Möglichkeit, eine neue Methode auf der Grundlage eines Codefragments in einem vorhandenen Member zu erstellen. Weitere Informationen finden Sie unter Umgestaltung.

Mithilfe von Methode extrahieren können Sie eine neue Methode erstellen, indem Sie eine Codeauswahl aus dem Codeblock eines vorhandenen Members heraus extrahieren. Die neue, extrahierte Methode enthält den ausgewählten Code, und der im vorhandenen Member ausgewählte Code wird durch einen Aufruf der neuen Methode ersetzt. Durch die Umwandlung eines Codefragments in eine eigene Methode haben Sie die Möglichkeit, Code schnell und exakt neu zu ordnen. Dadurch verbessern Sie die Wiederverwendbarkeit und die Lesbarkeit.

Methode extrahieren bietet folgende Vorteile:

  • Optimale Codierungstechniken aufgrund diskreter, wiederverwendbarer Methoden.

  • Selbstdokumentierender Code durch gute Organisation.

    Bei Verwendung beschreibender Namen können hoch entwickelte Methoden mehr Informationen einlesen als eine Reihe von Kommentaren.

  • Erstellung von Methoden mit höherer Granularität, um Überschreibungen zu vereinfachen.

  • Vorkommen von doppeltem Code werden reduziert.

Hinweise

Bei Verwendung des Befehls Methode extrahieren wird die neue Methode nach dem Quellmember in derselben Klasse eingefügt.

Partielle Typen

Wenn die Klasse ein partieller Typ ist, erzeugt Methode extrahieren eine neue Methode, die unmittelbar auf den Quellmember folgt. Methode extrahieren bestimmt die Signatur der neuen Methode und erstellt eine statische Methode, wenn von dem Code in der neuen Methode nicht auf Instanzdaten verwiesen wird.

Parameter für generische Typen

Wenn Sie eine Methode extrahieren, die über einen Parameter mit einem nicht beschränkten generischen Typ verfügt, fügt der generierte Code dem Parameter nur dann einen ref-Modifizierer hinzu, wenn dem Parameter ein Wert zugewiesen wurde. Wenn die extrahierte Methode Referenztypen als Argument für den generischen Typ unterstützt, sollten Sie dem Parameter in der Methodensignatur den ref-Modifizierer manuell hinzufügen.

Anonyme Methoden

Wenn Sie versuchen, ein Fragment aus einer anonymen Methode zu extrahieren, das einen Verweis auf eine außerhalb der anonymen Methode deklarierte oder referenzierte lokale Variable enthält, zeigt Visual Studio eine Warnung zu möglichen semantischen Änderungen an.

Wenn eine anonyme Methode den Wert einer lokalen Variablen verwendet, wird der Wert zu dem Zeitpunkt abgerufen, zu dem die anonyme Methode ausgeführt wird. Wenn eine anonyme Methode in eine andere Methode extrahiert wird, wird der Wert der lokalen Variablen abgerufen, wenn die extrahierte Methode aufgerufen wird.

Diese semantische Änderung wird anhand des folgenden Beispiels veranschaulicht. Wenn dieser Code ausgeführt wird, wird 11 auf der Konsole ausgegeben. Wenn Sie einen durch Codekommentare gekennzeichneten Bereich mit Methode extrahieren in eine eigene Methode extrahieren und dann den umgestalteten Code ausführen, wird 10 auf der Konsole ausgegeben.

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();
    }
}

Um diese Situation zu vermeiden, konfigurieren Sie die in der anonymen Methode verwendeten lokalen Variablen als Felder der Klasse.

Siehe auch

Aufgaben

Gewusst wie: Umgestalten von Code mit "Methode extrahieren"