Ich habe eine OOP-Kursaufgabe abgeschlossen, in der ich eine komplexe Zahlenklasse entwerfe und programmiere. Für zusätzlichen Kredit kann ich Folgendes tun:
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.
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)?
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.
Die Verwendung der redundanten this.
wird durch die Microsoft-Codierungsstandards unterstützt, die im StyleCop -Tool enthalten sind.
Sie können auch mathematische Operatoren überladen, genau wie :
%Vor%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. :)
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. Complex
stimmt mit der bereits in .NET Framework festgelegten Benennung überein. GetRealPart()
und GetComplexPart()
sollten anstelle von Methoden "get-only" -Eigenschaften sein. GetComplexPart()
wird falsch benannt, weil es tatsächlich den imaginären Teil zurückgibt. 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
. 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:
Es überrascht nicht, dass diese Konvention auf die % übertragen wurde. co_de% Struktur:
%Vor% 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.
Ich würde ja sagen, es sieht korrekt und leicht zu lesen. Aber ist das nicht etwas, das dein TA beantworten sollte?
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.
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:
Ein paar Dinge, die daraus folgen:
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.
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%