Sofern es nicht erforderlich ist, zwischen einer Variablen und einem Feld mit demselben Namen zu unterscheiden, stelle ich this.
in C # niemals ein Feld oder einen Elementzugriff vor. Ich sehe dies nicht anders m_
als das in C ++ übliche Präfix und denke, wenn Sie wirklich angeben müssen, dass es sich um ein Mitglied handelt, ist Ihre Klasse zu groß.
Es gibt jedoch eine Reihe von Leuten in meinem Büro, die überhaupt nicht einverstanden sind.
Was wird als aktuelle Best Practice angesehen this.
?
EDIT: Zur Verdeutlichung benutze ich niemals m_
und nur this.
wenn unbedingt nötig.
c#
coding-style
Andy Lowry
quelle
quelle
m_
soll das heißen?this.
fast so schlecht bin wie m_.Antworten:
Gemäß den Framework-Gestaltungsrichtlinien gilt Folgendes , wenn auf öffentliche oder geschützte Felder Bezug genommen wird:
Zum Beispiel
m_
ist ein Präfix.Daher eignet sich die öffentliche Bekanntmachung eines Feldes für die Verwendung des
this
Schlüsselworts, wie in MSDN erläutertWenn Sie sich auf private Felder beziehen, können Sie das verwenden,
m_
wenn Sie möchten. Für öffentliche Bereiche empfehle ich jedoch, die Best Practices zu befolgen.Persönlich mag ich keine Unterstriche in meinen Variablennamen. Ich versuche auch konsequent zu sein. Es
this.name = name;
ist also eine gute Faustregel, sowohl in öffentlichen als auch in privaten Szenarien zu arbeiten.quelle
m_
Präfix übersät ist. Ich denke, '_' ist ein gutes Präfix, da Sie sich nie um Stapelüberlaufprobleme aufgrund von Zuweisungsfehlern sorgen müssenIn unserem Team haben wir den Standard der Verwendung des Qualifizierers
this.
oder desMe.
Objektqualifizierers in größeren Klassen übernommen, damit Junior-Entwickler den genauen / unmittelbaren Gültigkeitsbereich einer Variablen durch einfaches Betrachten leichter erkennen können.In Bezug auf den Code ist dies eine völlig unnötige Beeinträchtigung, aber es blockiert nichts, da es am Ende ohnehin den gleichen exakten MISL-Code generiert. Wir haben es nur übernommen, weil es ein unmittelbares Problem ansprach, das wir bei einigen Junioren entdeckt haben. Darüber hinaus sehe ich es nicht als hilfreich an, es aufzunehmen.
quelle
StyleCop erzwingt die Verwendung von
this.
Also, wenn Sie dies als Best Practice betrachten (was ich auch tue), dann ist die Verwendung vonthis.
Best Practice.Der von Ihnen gewählte Stil hängt von Ihnen und Ihren eigenen Codierungsstandards ab. "Am besten" ist das, was Sie als "am besten" definieren. Sei einfach konsequent. Eine inkonsistente Verwendung führt nur zu Verwirrung.
Mein Argument ist, dass bei Verwendung
this.
von die Tatsache aufgerufen wird , dass Sie auf Instanzeigenschaften verweisen, sodass beispielsweise hervorgehoben werden kann, dass Sie sie mutieren (sofern vorhandenthis.x = ...
). Dies ist möglicherweise etwas, das Sie wissen möchten. Es wird auch die Tatsache hervorgehoben, dassthis.
Ihre Methode zu jedem Zeitpunkt, zu dem Sie sie sehen , niemals statisch sein kann. Wenn Sie eine Konvention wiem_
diese verwenden, ist dies ebenfalls möglich. Wenn Sie jedochm_
eine statische Methode erstellen oder eine Methode neu definieren, um den Wert von außerhalb der Klasse zu übergeben, müssen Sie daran denken, den Namen zu ändern, wenn Sie eine solche verwendenthis
Dann zwingt der Compiler Sie, die Änderung vorzunehmen.Einfach ausgedrückt
this
ist die Verwendung einfacher, da der Code nicht kompiliert werden kann, wenn Siem_
ihn manuell verwenden und die Tools nicht nutzen.quelle
Das Schöne an der Verwendung
m_
ist, dass Sie, sobald Sie den kleinenm
Intellisense eingeben, eine Liste aller Ihrer privaten Variablen erhalten. Ich persönlich halte dies für ein Plus. Aus ähnlichen Gründen würde ich mich auchs_
für private Statik undc_
private Konstanten entscheiden. Es ist eine ungarische Schreibweise, aber in dem Sinne, dass sie dem Variablennamen eine nützliche Bedeutung hinzufügt, damit jeder andere Programmierer Dinge über den Namen erzählen kann, die möglicherweise nicht ganz offensichtlich sind.Ich bin ganz sicher nicht damit einverstanden, keine Möglichkeit zu haben, zwischen Mitgliedsvariablen und Nichtmitgliedervariablen zu unterscheiden, weil sie unterschiedlich sind, und wenn ich Code lese, bei dem die Leute nichts tun, um zu unterscheiden, ist es wirklich schwerer zu lesen. Verwenden
this.
fühlt sich einfach an wie mehr Kesselplatte als nötig. Aber wirklich ist es persönlicher Geschmack, wenn Sie eine Zeit lang in eine Richtung codieren, dann denken Sie am Ende, dass dies richtig und alles andere falsch ist. Das einzige, was wirklich zählt, wenn das Schema vernünftig ist, ist, dass jeder im Team konsistent ist.quelle
this.
und lassen Sie sich von Intellisense helfen.this.
gibt Ihnen alles in der Klasse, ohne auf veraltete Namenskonventionen zurückgreifen zu müssen. Ich verstehe den Sinn verschiedener Buchstaben, ich glaube einfach nicht, dass sie notwendig sind. Wenn Sie so viele Eigenschaften, Konstanten usw. in einer Klasse haben, dass Sie diese Konvention benötigen, ist Ihr Design ziemlich kaputt.m_
ich eine Liste aller Mitgliedsvariablen. Durch Tippenthis.
erhalte ich eine Liste der Mitgliedsvariablen und Mitgliedsfunktionen.this
ist explizit. Es ist ein optisches Zeichen, das Sie nicht verfehlen können.Ich bevorzuge fast immer expliziten Code gegenüber impliziten Code. Deshalb benutze ich
this
häufig. Ich halte es für eine bewährte Methode.quelle
Ich benutze immer "das". Die Argumentation basiert auf zwei einfachen Fakten:
Die Verwendung von "this" macht es für jeden, der liest (dh nicht nur für den Autor, sondern möglicherweise auch für den Autor innerhalb von 6 Monaten, nachdem Einzelheiten der Implementierung vollständig vergessen wurden), deutlich, dass dies ein Klassenmitglied ist. Ich rede hier. "m_" und dergleichen ist nur eine Konvention, und wie jede andere Konvention kann sie missbraucht (oder überhaupt nicht verwendet) werden - es gibt weder zur Kompilierungszeit noch zur Laufzeit etwas, das "m _" / etc erzwingen könnte. "this" ist stärker: Sie können "m_" in eine lokale Variable einfügen, und der Compiler beschwert sich nicht. das kann man mit "this" nicht machen.
Wenn überhaupt, finde ich es bedauerlich, dass die Verwendung von "this" in Sprachspezifikationen nicht obligatorisch ist.
Als netter Bonus können Sie beim Debuggen über das "Dies" fahren (oder eine Uhr hinzufügen) und auch alle anderen Klassenmitglieder überprüfen - wertvolle Informationen.
quelle
Das
this
Schlüsselwort wird insbesondere zur Unterscheidung von 2 vorhandenen Variablen verwendet, insbesondere wenn Sie einen Konstruktor oder eine Methode mit einer Variablen mit demselben Namen haben, die jedoch denselben Typ haben kann.Beispiel:
Dies (zB
this.reason = reason
) weist den Variablen in der Klasse grundsätzlich den Wert aus den Parametern zu.this
Nimmt im Grunde die Klassereason
aus dem Parameterblock.quelle
Darüber habe ich mich auch schon länger gewundert. Nachdem ich einige umfangreiche Codierungen in Javascript vorgenommen hatte, habe ich mich dabei erwischt,
this.
häufiger in meinem C # -Code zu verwenden (vorher habe ich ihn fast ausschließlich in Konstruktoren oder ähnlichen Methoden verwendet, um Mehrdeutigkeiten zu vermeiden). Es macht den Code ein bisschen klarer, ohne dass zusätzliche Anstrengungen erforderlich sind. Außerdem werden die Namen Ihrer Klassenmitglieder nicht durch Präfixe verfälscht, und Sie können bei klarem Kontext oder in besonders komplexen Anweisungen immer noch auf die Verwendung der Elemente 'the short way' zurückgreifen. Ich füge nur hinzuthis.
, wenn ich eine längere Methode, eine längere Argumentliste oder viele lokale Variablen deklariert habe und ich denke, der Code könnte von zusätzlicher Klarheit profitieren, auch wenn er erzwungen wird.Aber ich persönlich hasse den
m_
Präfix-Stil absolut , nicht so sehr aufgrund von Ungarisch, sondern weil Unterstrichen ein mühsamer Tipp ist;) Also halte ich es nicht für eine Alternative. Ich gebe zu, es hat seine Stärken, wenn es um Intellisense geht. Sie können jedoch auch argumentieren, dass Ihre Klasse zu groß ist, wenn Sie sich nicht an die ersten Buchstaben einer Mitgliedsvariablen erinnern können.quelle
Ich überlege mir ein einzelnes Unterstrich-Präfix für die Teilnehmer. _someVar;
Warum? Sie wissen auf den ersten Blick, dass es sich um ein Mitglied handelt, nicht um eine Stapelvariable. Bequemlichkeit auf einen Blick. Und es dauert weniger Unordnung im Vergleich zu dem Schlüsselwort "this".
quelle
Die Verwendung von Dingen wie dem
this.
Präfix / Schlüsselwort, die weder notwendig sind noch das Ergebnis verändern, ist immer subjektiv. Ich denke jedoch, dass wir uns einig sein können, dass die meisten von uns Felder von lokalen Variablen unterscheiden möchten. Einige verwenden ein Unterstrich - Präfix (was ich hässlich finde und eine Art ungarische Notation), andere verwenden dasthis.
Schlüsselwort. Ich bin einer der letzteren. Es geht nur um Lesbarkeit und Verständlichkeit. Es macht mir nichts aus, ein bisschen mehr zu tippen, wenn es klarer oder lesbarer ist. Ich möchte Felder und Variablen im Handumdrehen unterscheiden.Ich definiere immer Felder mit ähnlichen
myField
Namen und Parameternamen sowie lokale Variablennamen mit ähnlichen NamenmyField
. Keine Unterstriche, keine Präfixe. Ich verwendethis
überall dort, wo ich mich auf ein Feld beziehe. Auf diese Weise kann ich Felder von lokalen Variablen und Argumenten ohne Präfix unterscheiden. In einem solchen Fall ist natürlich dasthis
Schlüsselwort erforderlich:Meine Eigenschaften sehen daher so aus (ja, ich habe das Feld immer mit der Eigenschaft versehen und nicht an einer anderen Stelle oben in meiner Datei):
Es liest sich gut: Geben Sie diesen Vornamen zurück .
quelle
EDIT: Meine Antwort ist eindeutig keine Antwort. Also hier ist eine Bearbeitung. In den Codierungsrichtlinien von Microsoft heißt es:
Kann unter folgender Adresse gefunden werden: http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx
Es scheint also, dass es zumindest bei MS keine klare Richtlinie gibt, obwohl eine andere Antwort besagt, dass StyleCop es zu einer Richtlinie macht. Es gibt keine Autorität in diesen Dingen, daher würde ich vorschlagen, dass Sie sich selbst entscheiden oder in diesem Fall Ihrem Team nachgeben. Es ist keine so große Sache.
Meine ursprüngliche Antwort stimme ich Ihnen persönlich zu, aber vielleicht wäre ein Leseverständnistest, bei dem die beiden Methoden gegeneinander getestet werden, wertvoll. Ansonsten sind diese Stilsachen nur schlammig.
Meine Salve lautet: Meiner Meinung nach verkomplizieren Leute unnötigerweise ihren Codestil, und wenn sie darauf hinweisen müssen, dass etwas eine Klassenvariable ist, kann der Code einige andere schwerwiegende strukturelle Probleme aufweisen, wie die uralte Rezeptmethode von Platzieren Sie private Variablen an der Spitze der Klasse, sodass Sie ständig nach oben und unten scrollen müssen.
Dies scheint mir eine dieser Konventionen zu sein, bei denen "Was ist das?" Es sollte bevorzugt werden, dass die Kürze explizit ist. Diese Lektion wird häufig von dynamischen Sprachen wiederholt. Wir brauchen nicht den ganzen Flaum!
quelle
Dies. kann oft zu unerwünschten Geräuschen führen.
Hier ist meine Lösung:
quelle