4 Stimmen

Resharper: Wie kann man die Einführung neuer privater Felder am Ende der Klasse erzwingen?

Resharper bietet eine sehr nützliche Einführung und Initialisierung des Feldes xxx Aktion, wenn Sie einen neuen Parameter in einem Konstruktor angeben, wie:

Constructor (int parameter)

Das einzige (kleine) Ärgernis ist, dass das neue Feld am Anfang der Klasse liegt - und ich bin ein Fan davon, private Teile so weit wie möglich von den neugierigen Blicken Fremder fernzuhalten ;).

Wenn Sie jedoch bereits einige private Felder in der Klasse haben, setzt Resharper das neue Feld "korrekt" (beachten Sie die Anführungszeichen, ich möchte keinen Flamewar über dieses Thema entfachen) neben diese, auch wenn sie am Ende der Klasse stehen.

Gibt es eine Möglichkeit, Resharper zu zwingen immer neue Felder am Ende der Klasse einfügen?

UPDATE: OK, ich habe vergessen zu erwähnen, dass ich über die Funktion "Type Members Layout in Options" Bescheid weiß, aber eine konkrete Hilfestellung, wie man die Vorlage ändern kann, um die Platzierung der Felder zu erreichen, wäre nett.

5voto

Martin Harris Punkte 27587

Im "Type Members Layout" können Sie den folgenden XML-Block finden und verschieben

<!--fields and constants-->
<Entry>
  <Match>
    <Or>
      <Kind Is="constant"/>
      <Kind Is="field"/>
    </Or>
  </Match>
  <Sort>
    <Kind Order="constant field"/>
    <Static/>
    <Readonly/>
    <Name/>
  </Sort>
</Entry>

Bis zum Ende des Standardmusters. Im Grunde genommen zwei Zeilen nach oben vom Ende der Datei

    <!--HERE-->

  </Pattern>      
</Patterns>

Leider zeigt ein schneller Test, dass dies keine Auswirkungen auf neue Felder hat, die durch die von Ihnen beschriebene Option erstellt werden, aber die Codebereinigung verschiebt sie an die richtige Stelle. (Vorausgesetzt, Sie haben "Reorder type members" aktiviert)


Wenn Sie die Gewohnheit haben, öffentliche Felder zu verwenden, und Sie nur die privaten Felder nach unten verschieben wollen, ändern Sie die obige Übereinstimmung wie folgt:

<Match>
  <And>
    <Access Is="private"/>
    <Or>
      <Kind Is="constant"/>
      <Kind Is="field"/>
    </Or>
  </And>
</Match>

Dann können Sie den gesamten Block erneut kopieren, den Wert "Zugriff ist" in "öffentlich" ändern und den neuen öffentlichen Block dort einfügen, wo Sie die öffentlichen Felder haben möchten - in der Nähe des oberen Bereichs, wo er ursprünglich herkam, würde ich vermuten.

0voto

Romain Verdier Punkte 12565

Verwenden Sie ein benutzerdefiniertes "Type Members Layout" in den Resharper-Optionen.

Im Abschnitt "Standardmuster" der XML-Layoutdefinition verschieben Sie einfach das Eintragselement, das Ihre Felder gruppiert, an das Ende des Abschnitts, nach Methoden, Ereignissen, Eigenschaften usw.

0voto

Drew Noakes Punkte 282438

Wenn Sie es noch nicht getan haben, sollten Sie einen Fehlerbericht auf der ReSharper Jira Seite einreichen:

http://www.jetbrains.net/jira/browse/RSRP

Schauen Sie zuerst nach, ob dies bereits jemand gemeldet hat. Wenn ja, können Sie über das Problem abstimmen und werden über Änderungen informiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X