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.
Um eine Refaktorierung zu verwenden, platzieren Sie den Textcursor:
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 refaktorieren — Strg+Umschalt+R, der Ihnen die Refaktorierungen zeigt, die auf die aktuelle Textcursorposition oder auf die aktuelle Auswahl angewendet werden können.
Diese Refaktorierung erlaubt Ihnen, eine Methodensignatur auf folgende Weise zu bearbeiten:
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.
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.
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.
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).
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.
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.
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.
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.
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.
Mithilfe dieser Refaktorierung können Sie schnell eine Instanzmethode vom aktuellen Typ zu einem der Typen bewegen, die in den Methodenparametern auftauchen.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.