Immer wieder hört man sowas wie: “was, ich kann mit ReSharper nicht mal eine Methode verschieben”?
Die Antwort: Doch, kann er natürlich mit links, aber ganz ohne Köpfchen gehts dann doch nicht.
Das Problem…
… liegt eigentlich auf der Hand. Eine Klassenmethode hat in der Regel Abhängigkeiten zu Membern der Klasse in der sie sich befindet. Wie soll nun ReSharper mit diesen Abhängigkeiten umgehen? Zum Glück macht er das nicht irgendwie, sondern erwartet da etwas Vorarbeit vom Entwickler.
Die Lösung…
… liegt meist nahe, wenn man sich das Problem mal klar gemacht hat – so auch hier. Es gilt also, diese Abhängigkeiten aufzulösen – was bei statischen Methoden der Fall ist.
Als einfaches Beispiel nachfolgende Methode, welche in die Klasse C verschoben werden soll:
public int Compute()
{
int result = _b.Read();
return result;
}
Hier gibt es eine Abhängigkeit auf _b. Um diese Abhängigkeit aufzulösen, übergibt man sie als Parameter an die Methode. Und da eilt ReSharper natürlich bereits mit einem Helferlein herbei:

public int Compute(B b)
{
int result = b.Read();
return result;
}
Damit hat die Methode keine direkten Abhängigkeiten mehr zur Klasse, was es einem erlaubt, diese auch als statisch zu deklarieren.

Die beiden Schritte könnte man in diesem Fall sogar in einem Rutsch tun. Der Dialog von “Make Static…” bietet eine Option, die Abhängigkeit _b als Parameter zu definieren:
![resharper_makestatic2[6] resharper_makestatic2[6]](http://66.147.244.219/~nettigke/wp-content/uploads/2010/09/resharper_makestatic26_thumb.png)
Je nach Komplexität der Methode, muss man jedoch doch auf die obere, zweistufige Methode zurückgreifen.
Und ist die Methode dann erstmal statisch, verweigert ReSharper auch die Move-Funktion nicht mehr:
