Refaktorierungen

Die Refaktorierungen von ReSharper übertreffen ihre Pendants in Visual Studio hinsichtlich Anzahl, Benutzerfreundlichkeit und Anwendungsmöglichkeiten. Jede Refaktorierung analysiert den gesamten Gültigkeitsbereich der Codeauswahl, auf den sie angewandt wird (dies kann ggf. die vollständige Lösung umfassen), einschließlich sprachübergreifenden Code. Anhand der gewonnenen Erkenntnisse wird der Code auf die sinnvollste Weise aktualisiert.

Alle Refaktorierungen von ReSharper funktionieren in C#, ein großer Anteil von ihnen ist auch unter VB.NET verfügbar und einige unter ASP.NET, XAML sowie anderen unterstützten Sprachen.

Interessant sind auch die Kontextaktionen von ReSharper, die weniger komplexe, überwiegend lokale Codetransformationen implementieren und nicht echte Refaktorierungen gemäß der Definition von Martin Fowler.

„Refactor This“-Menü in C#

Coderefaktorierungen verwenden

Um eine Refaktorierung zu verwenden, platzieren Sie den Textcursor:

  • auf ein Symbol im Texteditor,
  • auf eine Codeauswahl im Texteditor,
  • auf eine Datei oder eine Auswahl von Dateien im Toolfenster Solution Explorer,
  • auf ein oder mehrere Typmember in File Structure oder einem anderen ReSharper-Toolfenster.

Danach wählen Sie die benötigte Refaktorierung im Menü Refactor von ReSharper oder durch eine individuelle Tastenkombination aus. Eine Alternative ist der Befehl Dies refaktorierenStrg+Umschalt+R, der Ihnen die Refaktorierungen zeigt, die auf die aktuelle Textcursorposition oder auf die aktuelle Auswahl angewendet werden können.

Die Refaktorierung „Change Signature” in ReSharper

Change Signature

Diese Refaktorierung erlaubt Ihnen, eine Methodensignatur auf folgende Weise zu bearbeiten:

  • Parameter hinzufügen, entfernen, umbenennen oder neu anordnen
  • Rückgabetyp ändern
  • Parametertyp(en) ändern
  • Methode umbenennen

Beim Ändern der Signatur sucht ReSharper nach allen Verwendungen der Methode und passt alle Aufrufe, Implementationen und Überschreibungen der Methode an die Änderung an. Bei neu hinzugefügten Parametern werden in allen Methodenaufrufen vom Benutzer bereitgestellte Standardwerte eingesetzt. Bei Überschreibungen wird der Parameter, der ursprüngliche an die Methode übergeben wurde, an die Basismethode weitergereicht.

ReSharper-Refaktorierung Convert Extension Method to Static

Convert Extension Method to Plain Static

Diese Refaktorierung ohne Dialogfenster konvertiert eine Erweiterungsmethode zu einer statischen Methode derselben Klasse. Die umgekehrte Funktionalität wird durch Statische Methode in Erweiterungsmethode konvertieren ermöglicht.

Convert Static to Extension Method

Diese Refaktorierung konvertiert eine statische Methode zu einer Erweiterungsmethode. Damit die Konvertierung erfolgreich ausgeführt wird, muss die statische Methode (1) mindestens ein Argument haben und (2) sich in einer statischen Klasse befinden. Die umgekehrte Funktionalität wird durch Convert Extension Method to Plain Static bereitgestellt.

Schnittstelle mit ReSharper-Refaktorierung zu einer abstrakten Klasse konvertieren

Convert Interface to Abstract Class

Sie sollten diese Refaktorierung verwenden, wenn Sie Logik zu einer Schnittstelle hinzufügen wollen oder der Ansicht sind, dass diese lieber eine Klasse sein sollte. Die Refaktorierung prüft auf Konflikte, d. h. auf Typen, welche die Schnittstelle implementieren und bereits einen Basistyp haben (in C# wäre das ein Fehler, da die Sprache keine Mehrfachvererbung hat).

Convert Abstract Class to Interface

Sie können diese Refaktorierung anwenden, um eine abstrakte Klasse zu einer Schnittstelle zu konvertieren. Dies ist besonders nützlich, wenn eine Klasse von mehreren abstrakten Klasse erben soll, weshalb Sie eine davon zu einer Schnittstelle konvertieren müssen.

Die Refaktorierung Extract Superclass in ReSharper

Extract Superclass

Mit dieser Refaktorierung können Sie für eine Klasse eine Basisklasse erstellen und einige Member zu dieser bewegen. Platzieren Sie den Textcursor einfach auf eine Klassendeklaration, wählen Sie die Mitglieder aus, die Sie extrahieren wollen, und führen Sie die Refaktorierung aus. Das ist sehr hilfreich für das Bewegen von Logik nach oben in einer Vererbungshierarchie, damit sie später geteilt werden kann.

Die Refaktorierung Introduce Parameter in ReSharper

Introduce Parameter

Wählen Sie einen Ausdruck oder eine lokale Variable in einer Methode aus und verwenden Sie diese Refaktorierung, um daraus einen neuen Parameter zu erstellen. Alle Aufrufstellen werden aktualisiert, um die veränderte Signatur wiederzugeben, wobei die Logik und die Semantik beibehalten werden.

Wenn ein Ausdruck lokale Variablen verwendet, die an einer Aufrufstelle unzugänglich sind, dann erlaubt diese Refaktorierung, sie als Delegates zu übergeben.

Make Method Static/Shared

Diese Refaktorierung konvertiert eine nicht statische Methode zu einer statischen (Shared in VB.NET), indem this zu einem Parameter der Methode gemacht wird. Nach der Refaktorierung wird die Zielmethode als statisch deklariert (Shared in VB.NET) und notwendige Parameter werden zu deren Aufrufstellen hinzugefügt. Diese Refaktorierung ist auch nützlich, um nicht statische Methoden (nicht Shared in VB.NET) zu verschieben. Verwenden Sie in diesem Fall Make Method Static als Vorbereitungsschritt für die Refaktorierung Make Method Non-static.

Make Method Non-Static/Non-Shared

Diese Refaktorierung konvertiert eine statische Methode (Shared in VB.NET) zu einer Instanzmethode in dem Typ des ausgewählten Parameters (d. h. die Methode wird in den Typ des Parameters verschoben und der Parameter in wird in this geändert). Methodenaufrufe werden dabei entsprechend geändert.

Move Instance Method

Mithilfe dieser Refaktorierung können Sie schnell eine Instanzmethode vom aktuellen Typ zu einem der Typen bewegen, die in den Methodenparametern auftauchen.

Move Static Member

Diese Refaktorierung verschiebt statische Felder und Methoden zu einem anderen Typ. Wenn Sie nicht statische Methoden verschieben wollen, dann verwenden Sie stattdessen Move Instance Method.

Move String to Resource

Als Teil des ReSharper-Funktionspakets für Internationalisierung hilft diese Refaktorierung, lokalisierbare Strings in Ressourcendateien zu extrahieren. Während der Refaktorierung werden explizite Stringverwendungen durch Referenzen zu Ressourcen-Wrappern ersetzt.

Sie können diese Refaktorierung mit einer Tastenkombination oder mit dem Befehl Refactor this aufrufen. ReSharper bietet auch eine Codeinspektion, die nicht in Ressourcendateien ausgelagerte Strings hervorhebt und als Quick-Fix die Refaktorierung Move String to Resource vorschlägt. Die ReSharper-Hilfe beschreibt, wie Sie ReSharper entsprechend konfigurieren können.

Pull Members Up

Diese Refaktorierung hilft Ihnen beim Verschieben von Typmembern zu einer übergeordneten Klasse oder einer Schnittstelle. Diese Operation ist nützlich, um Verhalten zu generalisieren. ReSharper analysiert alle Mitglieder der aktuellen Klasse und macht eine Liste der Mitglieder, die Sie nach oben verschieben können. Bevor Sie die Refaktorierung beenden, prüft ReSharper mögliche Konflikte, zum Beispiel ob die Mitglieder, die Sie zu einer übergeordneten Klasse verschieben wollen, im Zieltyp zugänglich sein werden. Die umgekehrte Funktionalität ist über Push Members Down verfügbar.

Push Members Down

Diese Refaktorierung hilft Ihnen beim Aufräumen Ihrer Typhierarchie, indem Typmember zu einem Untertyp bewegt werden. Diese Operation ist nützlich, um Verhalten zu spezialisieren. ReSharper analysiert alle Mitglieder des ausgewählten Typs und erstellt eine Liste der Mitglieder, die Sie nach unten verschieben können. Bevor Sie die Refaktorierung beenden, prüft ReSharper mögliche Konflikte, zum Beispiel, ob die Mitglieder, die Sie verschieben wollen, im Zieltyp zugänglich sein werden. Die umgekehrte Funktionalität ist über Pull Members Up verfügbar.

Die Refaktorierung Pull Parameter in ReSharper

Pull Parameter

Wenn Sie mit einem Quick-Fix oder mit der Refaktorierung Change Signature einen neuen Parameter zu einer Methode hinzufügen, aktualisiert ReSharper nicht nur die Signatur und alle Verwendungen der Methode, sondern analysiert auch die Aufrufkette, zu der die Methode gehört, und erlaubt Ihnen, den neuen Parameter an eine beliebige Stelle in dieser Kette zu „ziehen“.

Die Refaktorierung Rename in XAML

Rename

Die Rename-Refaktorierung erlaubt Ihnen, jedes Symbol umzubenennen – zum Beispiel Namespaces, Typen, Methoden, Parameter, lokale Variablen, Eigenschaften, Felder und Ereignisse. Sie findet und korrigiert automatisch alle Referenzen auf das Symbol. Die Rename-Refaktorierung kann direkt vom Editor aus und manchmal auch aus anderen Ansichten (Klassenansicht, Objektbrowser) aufgerufen werden.

Rename funktioniert mit allen unterstützten Sprachen und Technologien, einschließlich C#, VB.NET, ASP.NET, XML, XAML und Buildskripten.

Bei der Rename-Refaktorierung erstreckt sich die automatische Referenzkorrektur uneingeschränkt auch auf XAML-Markup. Außerdem können auch bestimmte XAML-Symbole wie Namespace-Aliasnamen und Ressourcen einfach umbenannt werden.

Wenn Sie mit ReSharper bei Buildskripten eine Eigenschaft oder ein Ziel umbenennen, dann werden alle Referenzen und sogar die Nennungen in Kommentaren und Strings automatisch auf den neuen Namen aktualisiert.

Die Refaktorierung Transform Parameters in ReSharper

Transform Parameters

Diese Refaktorierung erstellt eine neue Klasse oder Struct und konvertiert Parameter der ausgewählten Methode zu gekapselten Feldern des neu erstellten Typs. Die Verwendungen von Parametern werden zu Verwendungen der Eigenschaften des neu erstellten Typs konvertiert.

Dadurch werden Sie außerdem out-Parameter los: Bei void-Methoden werden ein oder mehrere out-Parameter zu einem Rückgabewert konvertiert, der gegebenenfalls ein Tupel-Objekt verwendet und bei nicht-void-Methoden ist eine Kombination mit dem bestehenden Rückgabetyp möglich – erneut mithilfe eines Tupel-Objekts.

Die Refaktorierung Transform Parameters kombiniert und ersetzt zwei andere Refaktorierungen: Transform Out Parameters und Extract Class from Parameters.

Replace Constructor with Factory Method

Diese Refaktorierung kapselt einen Konstruktor in einer statischen Methode, die eine neue Instanz einer Klasse zurückgibt.

Das Pattern „Factory-Methode“ ist eine Möglichkeit, Objekte zu erstellen, ohne dabei die genaue Klasse der Objekte zu bestimmen, die erstellt werden. ReSharper generiert eine gesonderte Methode für das Erstellen von Objekten. Unterklassen können diese überschreiben, um den abgeleiteten Objekttyp zu bestimmen, der erstellt wird.

Use Base Type where Possible

Mit dieser Refaktorierung wird Ihr Code verallgemeinert, indem Verwendungen eines abgeleiteten Typs durch Referenzen auf einen Basistyp oder eine Schnittstelle ersetzt werden, wenn keine Mitglieder des abgeleiteten Typs verwendet werden. Das ist besonders nützlich nach der Refaktorierung Pull Members Up.

Copy Type

Es braucht nur eine Sekunde, um eine Kopie eines Typs unter einem anderen Namen oder in einem anderen Namespace zu erstellen. ReSharper übernimmt das Erstellen der neuen Datei. Bei partiellen Typen werden alle Teile kopiert, selbst wenn sie sich in unterschiedlichen Dateien befinden.

Convert Anonymous to Named Type

Diese Refaktorierung konvertiert anonyme Typen zu benannten Typen im Geltungsbereich der aktuellen Methode (lokal) oder der gesamten Lösung (global). In dem Dialogfeld dieser Refaktorierung können Sie angeben, ob ReSharper Auto-Eigenschaften oder Eigenschaften mit Unterstützungsfeldern generieren soll, und ob Gleichheits- und Formatierungsmethoden überladen werden werden sollen.

Convert Indexer to Method

Diese Refaktorierung funktioniert ähnlich wie Convert Property to Method, aber sie wird auf Indexer angewendet (Standardeigenschaften in VB.NET). Sie können nur Getter, nur Setter oder beide zu einer Methode konvertieren. Die umgekehrte Funktionalität wird durch Convert Method to Indexer ermöglicht.

Convert Method to Indexer

Dies ist die Umkehrung von Convert Indexer to Method. Die Refaktorierung funktioniert ohne Dialog, aber Sie müssen sie auf zwei Methoden anwenden, um sowohl einen Getter als auch einen Setter in Ihrem Indexer zu generieren.

Convert Method to Property

Diese Refaktorierung konvertiert nicht-void-Methoden ohne Parameter zu Eigenschaften mit Lesezugriff, und void-Methoden mit genau einem Parameter zu Eigenschaften mit Schreibzugriff. Gepaarte Methoden können zu einer einzelnen Eigenschaft mit Lese- und Schreibzugriff konvertiert werden.

Convert Property to Auto-Property

Diese Refaktorierung hilft Ihnen beim Konvertieren von Eigenschaften mit privaten Unterstützungsfeldern zu automatisch implementierten Eigenschaften (auch bekannt als Auto-Eigenschaften). Die Refaktorierung entfernt das Unterstützungsfeld und ersetzt dessen Verwendungen durch die neu erstellte Auto-Eigenschaft.

Die Refaktorierung Convert Property to Method in ReSharper

Convert Property to Method

Mithilfe dieser Refaktorierung können Eigenschaften mit Lesezugriff zu Getter-Methoden (nicht-void-Methoden ohne Parameter) und Eigenschaften mit Schreibzugriff zu Setter-Methoden (void-Methoden mit genau einem Parameter) konvertiert werden. Sie können Eigenschaften, die sowohl Lese- als auch Schreibzugriff erlauben, zu Methodenpaaren vom Typ Getter und Setter konvertieren.

Die Refaktorierung Extract Class in ReSharper

Extract Class

Haben Sie eine Klasse, welche die Arbeit erledigt, die eigentlich von zwei unterschiedlichen Klassen erledigt werden sollte? Dann verwenden Sie diese Refaktorierung, um eine komplexe Klasse in zwei Klassen mit jeweils einer einzigen Verantwortlichkeit zu zerlegen. Extract Class hilft Ihnen bei der Auswahl der Methoden und Felder, die von der alten zur neuen Klasse verschoben werden sollen. Die Refaktorierung warnt Sie auch vor kaputten Abhängigkeiten und Zugriffsproblemen und schlägt Möglichkeiten zur Konfliktlösung vor.

Extract Interface

Diese Refaktorierung erlaubt Ihnen, eine Schnittstelle aus einer Klasse zu erstellen und diese Klasse die erstellte Schnittstelle implementieren zu lassen. Sie können die Mitglieder auswählen, die in die Schnittstelle extrahiert werden sollen, und einen Namen für die Schnittstelle angeben.

Extract Method

Wählen Sie einen Codeblock aus und rufen Sie die Refaktorierung Extract Method auf, um den Block in eine Methode (Sub oder Funktion in VB.NET) zu extrahieren. ReSharper analysiert automatisch den Code, um den Rückgabewert und/oder die out-/ref- Parameter zu erkennen.

Introduce Field

Wählen Sie einen Ausdruck oder eine lokale Variable aus und wenden Sie diese Refaktorierung an, um ein neues Feld oder eine Konstante zu erstellen und mit dem Ausdruck bzw. dem Initialisierungswert der lokalen Variable zu initialisieren. Dieses Feld kann in seinem Initialisierer, in Typkonstruktoren oder aktuellen Mitgliedern zugewiesen werden.

Inline Field

Wenn ein Feld eine einzelne Schreibverwendung hat, dann ersetzt diese Refaktorierung Leseverwendungen des Felds mit dessen Initialisierungsausdruck und löscht die Felddeklaration und die Schreibverwendung.

Encapsulate Field

Die Refaktorierung Encapsulate Field erlaubt Ihnen, schnell eine Accessor-Eigenschaft aus einem bestehenden Feld zu erstellen. Die Verwendungen des Feldes werden automatisch durch Verwendungen der Eigenschaft ersetzt. Ein offensichtlicher Vorteil dieser Refaktorierung ist, dass Sie durch den Gebrauch von Eigenschaften den direkten Zugriff auf ein Feld verbieten können.

Inline Method

Wenn möglich, transferiert diese Refaktorierung den Code einer Methode in deren Aufrufer und löscht danach die Methode. Die umgekehrte Funktionalität wird durch Extract Method ermöglicht.

Variable einführen mit der Refaktorierung von ReSharper

Introduce Variable

Wählen Sie einen beliebigen Ausdruck innerhalb des Codes in einem Mitglied aus und rufen Sie die Refaktorierung Introduce Variable auf. Eine neue implizit oder explizit typisierte lokale Variable wird deklariert und mit dem ausgewählten Ausdruck initialisiert. Der ursprüngliche Ausdruck wird durch den Namen der Variable ersetzt. Sollte der ursprüngliche Ausdruck mehrmals in Ihrem Code vorkommen, dann bekommen Sie die Möglichkeit, alle durch die neu erstellte Variable zu ersetzen. Sie können auf die gleiche Weise auch Konstanten für konstante Ausdrücke einführen.

Inline Parameter

Diese Refaktorierung hilft Ihnen beim Verschieben eines Methodenparameters in dessen Textkörper. Wenn zum Beispiel bei allen Aufrufen derselbe konstante Wert an die Methode übergeben wird, dann kann der Parameter entfernt und die entsprechende lokale Variable zum Methodentext hinzugefügt werden.

Inline Variable

Wählen Sie eine beliebige Variable oder lokale Konstante aus und rufen Sie die Refaktorierung „Inline Variable“ auf. Alle Vorkommen der ausgewählten Variable in Ihrem Code werden durch deren Initialisierungsausdruck ersetzt. Die umgekehrte Funktionalität wird durch Introduce Variable ermöglicht.

Die Refaktorierung Introduce Variable for Substring

Introduce Variable for Substring

Diese Refaktorierung hilft Ihnen, einen Teil eines Strings in eine separate Variable zu verschieben. Abhängig von der Zielversion von C# wird die Refaktorierung entweder eine Stringinterpolation verwenden oder den String mit String.Format() umgeben.

Die Refaktorierung Move Types into Matching Files in ReSharper

Move Types into Matching Files

Diese Refaktorierung kann auf eine einzelne Datei oder eine Dateiauswahl angewandt werden, die jeweils mehrere Typen enthalten. ReSharper erzeugt für jeden dieser Typen zugehörige Dateien und verschiebt sie dorthin.

„Move Types into Matching Files“ ist ein unverzichtbarer Helfer, wenn Sie es vorziehen, zunächst undeklarierte Typen zu verwenden und diese dann mit der ReSharper-Funktion Create from Usage zu deklarieren.

Auf diese Refaktorierung können Sie auch zugreifen, indem Sie Alt+Enter drücken, während der Cursor sich auf dem Namen einer Klasse befindet, die nicht dem Namen der aktuellen Datei entspricht.

Move to Folder

Diese Refaktorierung verschiebt eine oder mehrere Klassen oder Dateien zu einem anderen Projekt oder Ordner in der Lösung. Wenn die Verschiebung ausgeführt wird, aktualisiert ReSharper bei Bedarf die Using-Anweisungen. Die Refaktorierung kann optional Namespaces gemäß dem neuen Ort umbenennen und verschobene Klassen auf separate Dateien verteilen.

Move Type to Outer Scope

Diese Refaktorierung verschiebt einen geschachtelten Typ zu einer übergeordneten Ebene. Falls der geschachtelte Typ Mitglieder des einschließenden Typs verwendet, dann wird eine Referenz an den einschließenden Typ als Argument in die Konstruktoren des verschobenen Typs aufgenommen. Auf diese Refaktorierung kann über den Befehl Move refactoring zugegriffen werden.

Move Type to Another File or Namespace

Sie können Typen einfach zwischen Namespaces verschieben. Dabei werden Referenzen automatisch von ReSharper aktualisiert. Sie können außerdem einen Typ in einen übergeordneten oder untergeordneten Geltungsbereich oder in eine andere Datei verschieben.
Mit dieser Refaktorierung können Sie den Code zur Implementierung eines Typs unkompliziert in eine separate Datei verschieben. Auf diese Refaktorierung kann über den Befehl Move refactoring zugegriffen werden.

Wenn Sie XAML verwenden und eine .NET-Klasse zu einem anderen Namespace verschieben, dann werden die XAML-Markup-Referenzen zu der Klasse aktualisiert und die XAML-Importanweisungen entsprechend eingefügt/geändert. Diese Refaktorierung kann auch direkt im XAML-Markup für eine beliebige Typreferenz aufgerufen werden.

Safe Delete

Wenn Sie einen Typ, ein Typmitglied oder irgendein anderes Symbol in C#- oder VB.NET-Codedateien, ASP.NET-Code und -Markup, Buildskripten oder XAML löschen wollen, dann verwenden Sie diese Refaktorierung, um sicherzustellen, dass der Löschvorgang sicher ist. Wenn keine Symbolverwendungen gefunden wurden oder wenn es nur Verwendungen gibt, die sicher entfernbar sind, dann wird das Symbol gelöscht. Andernfalls wird ReSharper Ihnen alle Verwendungen zeigen, die nicht sicher gelöscht werden können, damit Sie den Code bearbeiten können.

Diese Refaktorierung kann auf eine Auswahl von Dateien oder Dateimembern angewendet werden, was Ihnen erlaubt, ganze Teilsysteme sicher zu löschen.

Wenn Sie Safe Delete auf ein Ziel oder eine Eigenschaft in einer Builddatei anwenden, dann erledigt ReSharper alle notwendigen Validierungen und Operationen, um das ausgewählte Symbol zu entfernen. ReSharper kann für Sie auch alle Referenzen mit Konflikten entfernen.

Die Refaktorierung Extract Members to Partial

Extract Members to Partial

Diese Refaktorierung hilft Ihnen, schnell Typmember zwischen verschiedenen Typteilen von partiellen Klassen zu verschieben. Abhängig von Ihrer Eingabe verwendet die Refaktorierung bestehende Typteile oder erstellt neue.

Sie können die Refaktorierung sogar für eine #region aufrufen, um alle Member in der Region in eine neue Datei zu verschieben, deren Namen vom Namen der Region abgeleitet wird.

Hinweis zu Tastenkombinationen

Alle auf dieser Seite angegebenen Tastenkürzel sind in der standardmäßigen "Visual Studio"-Tastaturbelegung von ReSharper verfügbar. Weitere Informationen zu den beiden Tastaturbelegungen von ReSharper finden Sie in der ReSharper-Dokumentation.