C # mit dem Schlüsselwort "this" in dieser Situation?

7

Ich habe eine OOP-Kursaufgabe abgeschlossen, in der ich eine komplexe Zahlenklasse entwerfe und programmiere. Für zusätzlichen Kredit kann ich Folgendes tun:

  1. Fügen Sie zwei komplexe Zahlen hinzu. Die Funktion nimmt ein komplexes Zahlenobjekt als Parameter und gibt ein komplexes Zahlenobjekt zurück. Wenn zwei komplexe Zahlen hinzugefügt werden, wird der reelle Teil des aufrufenden Objekts dem reellen Teil des als Parameter übergebenen komplexen Zahlenobjekts hinzugefügt, und der Imaginärteil des aufrufenden Objekts wird zum imaginären Teil des komplexen Zahlobjekts hinzugefügt, das als übergeben wird ein Parameter.

  2. Subtrahiere zwei komplexe Zahlen. Das Funktion wird einen Komplex annehmen Zahlenobjekt als Parameter und Rückgabe eines komplexen Zahlenobjekts Wann Subtrahieren zwei komplexe Zahlen, die Realer Teil der komplexen Nummer Objekt, das als Parameter übergeben wird subtrahiert vom realen Teil des Aufrufendes Objekt und das Imaginäre Teil des komplexen Zahlenobjekts übergeben, wenn ein Parameter subtrahiert wird aus dem imaginären Teil des aufrufendes Objekt.

Ich habe das oben programmiert, und ich habe das This-Schlüsselwort verwendet, um die aktuelle Instanz der Klasse zu bezeichnen, der Code für meine Add-Methode ist unten und meine Subtraktionsmethode sieht ähnlich aus:

%Vor%

Meine Frage ist: Habe ich das richtig und mit gutem Stil gemacht? (mit dem Schlüsselwort this)?

    
Alex 04.12.2009, 08:15
quelle

11 Antworten

18

Die Verwendung des this -Schlüssels kann diskutiert werden, aber es läuft normalerweise auf den persönlichen Geschmack hinaus. In diesem Fall, obwohl es aus technischer Sicht redundant ist, denke ich persönlich, dass es Klarheit schafft, also würde ich es auch verwenden.

    
Fredrik Mörk 04.12.2009, 08:20
quelle
6

Die Verwendung der redundanten this. wird durch die Microsoft-Codierungsstandards unterstützt, die im StyleCop -Tool enthalten sind.

p>     
Steve Gilham 04.12.2009 08:24
quelle
6

Sie können auch mathematische Operatoren überladen, genau wie :

%Vor%     
Rubens Farias 04.12.2009 08:26
quelle
3

Da Sie jetzt C # lernen und nach Stil fragen, werde ich Ihnen einige Dinge zeigen, die mit dem Code falsch sind, den Sie zusammen mit Gründen gepostet haben.

Bearbeiten: Ich habe nur darauf geantwortet, weil es so aussieht, als würdest du tatsächlich daran arbeiten, dieses Zeug herauszufinden. Da dies die Art von Leuten ist, mit denen ich am liebsten zusammenarbeite, bin ich kritischer, weil ich hoffe, dass es dir dabei hilft, irgendwo besser zu werden. :)

Strukturname

  1. ComplexNumber ist unnötig lang. Beachten Sie, dass keiner von Single , Double , Int32 , Int64 usw. Number im Namen hat. Dies deutet Complex als einen geeigneteren Namen an.
  2. Complex stimmt mit der bereits in .NET Framework festgelegten Benennung überein.

Reale und imaginäre Komponenten

  1. GetRealPart() und GetComplexPart() sollten anstelle von Methoden "get-only" -Eigenschaften sein.
  2. GetComplexPart() wird falsch benannt, weil es tatsächlich den imaginären Teil zurückgibt.
  3. Da das .NET-Framework bereits eine Complex -Struktur hat, sollten Sie die Benennung nicht neu erfinden. Sofern Sie nicht in der Lage sind, Framework-Konventionen neu zu definieren, müssen die Eigenschaften daher den Namen Real und Imaginary .
  4. haben

Operationen

Wenn Sie sich bestehende Beispiele ansehen, wie System.Windows.Vector sehen Sie, dass mathematische Operationen durch die Bereitstellung einer statischen Methode und eines Operators implementiert werden:

%Vor%

Es überrascht nicht, dass diese Konvention auf die % übertragen wurde. co_de% Struktur:

%Vor%

Zusammenfassung

Das Ergebnis ist sauber, leicht zu überprüfen und verhält sich so, wie alle es erwarten. Das Schlüsselwort System.Numerics.Complex wird nicht angezeigt / kann nicht angezeigt werden, da die Methoden statisch sind.

%Vor%     
Sam Harwell 03.04.2010 17:17
quelle
1

Ich benutze dieses Schlüsselwort nur für Variablen und wenn es ein Argument gibt, das denselben Namen wie die private Variable hat. d. h.

%Vor%     
Raj 04.12.2009 08:37
quelle
0

Ich würde ja sagen, es sieht korrekt und leicht zu lesen. Aber ist das nicht etwas, das dein TA beantworten sollte?

    
Sune Rievers 04.12.2009 08:20
quelle
0
%Vor%

Auch wenn Sie this von GetRealPart() weglassen, sollte es immer noch in Ordnung sein. Aber die Verwendung von this macht es sehr einfach zu lesen und zu verstehen, wenn es um Betreuer geht.

%Vor%     
aJ. 04.12.2009 08:22
quelle
0

Ich finde mich immer mehr mit dem Schlüsselwort this für Methoden und Eigenschaften der aktuellen Instanz, da es meiner Meinung nach die Lesbarkeit und Wartbarkeit erhöht. Dies ist besonders nützlich, wenn Ihre Klasse auch statische Methoden und / oder Eigenschaften besitzt, auf denen Sie das Schlüsselwort this natürlich nicht verwenden können, da diese nicht mit der aktuellen Instanz zusammenhängen. Wenn Sie this verwenden, sehen Sie deutlich den Unterschied.

Um es noch weiter zu bringen, sollten Sie den Klassennamen als Qualifikationsmerkmal für statische Methoden und Eigenschaften verwenden, sogar innerhalb der Klasse selbst.

    
HKalnes 04.12.2009 08:41
quelle
0

Um die Antworten zu vervollständigen, gibt es einen Fall, in dem das Schlüsselwort this obligatorisch ist. In diesem Fall haben Sie eine lokale Variable (oder einen Methodenparameter), die denselben Namen wie ein Klassenmitglied hat. In diesem Fall wird das Schreiben ohne this auf die lokale Variable und mit this wird das Klassenmitglied gesetzt. Zur Veranschaulichung:

%Vor%

Ein paar Dinge, die daraus folgen:

  • Vermeiden Sie es immer, lokalen Variablen den gleichen Namen wie den Klassenmitgliedern zu geben (ich gebe zu, dass ich das nicht immer selbst befolge);
  • Das Schreiben von this vor allen Mitglied-Zugriffen wirkt wie eine Sicherheitsmaßnahme. Wenn Sie ein Stück Code ohne dieses schreiben und später eine lokale Variable mit dem gleichen Namen und Typ wie ein Klassenmitglied einführen, wird Ihr Code trotzdem gut kompilieren, aber etwas völlig anderes (und wahrscheinlich falsches) tun.

Eine Instanz, in der ich die gleichen Namen für Methodenparameter wie für Klassenmitglieder verwende, ist in Konstruktoren. Ich schreibe es oft so:

%Vor%

Meiner Meinung nach macht das den Konstruktor klarer, weil Sie sofort verstehen, welcher Parameter welches Klassenmitglied setzt.

    
Vilx- 04.12.2009 09:06
quelle
0

Die Verwendung dieses Keywords scheint in Ordnung.

Obwohl ich an eine Klasse wie Complex glaube, sollten Sie den reellen und komplexen Teil als int-Eigenschaften speichern und sie in der Methode verwenden, anstatt die Methoden GetRealPart () und GetComplexPart () zu verwenden

Ich würde es so machen:

%Vor%

Das Folgende ist ein Szenario, in dem dies verwendet werden muss, andernfalls wird der Parameter und nicht das Klassenmitglied für LHS und RHS der Zuweisung berücksichtigt.

%Vor%     
Rashmi Pandit 04.12.2009 08:21
quelle
0

Wenn Sie den Namenskonventionen folgen, wird dies folgendermaßen verwendet:

%Vor%     
Daniel 03.04.2010 16:50
quelle

Tags und Links