In VB.NET konnte ich meinen mathematischen Code viel sauberer machen, indem ich System.Math importiere und direkt auf seine Methoden referenziere:
%Vor%Aber ich glaube nicht, dass C # Klassen verwenden kann, um implizit auf ihre Methoden zuzugreifen, also muss ich etwas tun wie:
%Vor%Aber das ist hässlich; es braucht eine eigene Bildlaufleiste !. Gibt es eine Möglichkeit, etwas in C # zu schreiben, das wie mein VB.NET-Code aussieht? Ich könnte lokale Wrapper-Methoden für Sin und Cos schreiben, aber würde das nicht die Performance reduzieren (wegen des Overheads von Funktionsaufrufen)? Und das würde das Schreiben von Wrapper-Funktionen für jede Math-Funktion erfordern, die ich in jeder Klasse verwende, in der ich sie verwende; das ist auch nicht so wünschenswert.
Sie könnten System.Math
mit der using-Direktive einen Alias geben:
Das ist das Beste, was ich habe.
Ich könnte lokale Wrapper-Methoden für Sin und Cos schreiben, aber würde das nicht die Performance reduzieren (wegen des Overheads von Funktionsaufrufen)?
Sie könnten, und an diesem Punkt könnten Sie Generika und andere Feinheiten verwenden, um es noch bequemer zu machen, aber Sie würden immer noch auf eine solche Bibliothek verweisen, es sei denn, die ganze Mathematik würde in der gleichen Klasse passieren, in der dieser Code vorkommt als Methoden.
Die Frage nach "Performance from Overhead" wird beantwortet mit "zusätzlichen Stack-Frames für so etwas Einfaches sind für Standardanwendungen nicht auffällig". Wenn Sie in einer engen Schleife wären, dann wäre das ein Problem.
Ab C # 6.0 können Sie die mathematischen Referenzen verkürzen, indem Sie eine using static
Deklaration hinzufügen:
Damit können Sie statische Member vom Typ Math
verwenden, ohne sie mit dem Typnamen zu versehen:
Es gibt keine Möglichkeit, dies "global" zu tun, da es derzeit keine Möglichkeit gibt, eine using-Deklaration global anzuwenden.
Für diejenigen, die nicht C # 6 verwenden
Aber würde das nicht die Performance reduzieren (wegen des Overheads von Funktionsaufrufen)?
Ich würde mir keine Sorgen machen. Schreiben Sie zuerst Ihren Code als lesbar . Wir können die Methode auf verschiedene Arten schreiben. Die erste ist, einfach Leerraum hinzuzufügen:
%Vor%Sie können das auch in eine Hilfsmethode einfügen.
jcolebrands Antwort ist eine nette Sache, das auch zu tun, aber es erfordert das Hinzufügen von using m = System.Math;
überall.
Aber das ist hässlich; Es benötigt eine eigene Bildlaufleiste!
Ja, bei Stapelüberlauf, der eine kurze Breite hat. Sie müssen es stattdessen auf mehrere Zeilen setzen:
%Vor%Ich persönlich denke, dass auf jeden Fall besser lesbar ist, weil jetzt die drei verschiedenen Werte klarer differenziert sind. Eine Leerzeile ist ein klarer Trennzeichen als nur ein Komma, IMO. Wenn Sie mehrere Argumente haben, die so ähnlich sind, dass sie zusammen verloren gehen können, verwenden Sie mehrere Zeilen zur besseren Übersicht.
Ja, es wäre irgendwie schön, wenn Sie einfach Sin(az)
etc schreiben könnten - aber es gibt nichts in C #, das Ihnen das erlauben würde, also würde ich den Code immer neu formatieren zur besseren Lesbarkeit.
Sie können
hinzufügen %Vor%und dann mach einfach
%Vor%aber .... Ich sehe den wirklichen Wert nicht
Tatsächlich sollte jede dieser Variablen mit besseren Namen gespeichert werden, um darzustellen, was sie sind. Wenn ich das ansehe, sehe ich nicht, was getan wird.
%Vor%Oder besser, was sind die drei Parameter, die von Vector3 eigentlich aufgerufen werden?
%Vor%Das würde die Lesbarkeit GROSS verbessern, da die nächste Person besser verstehen würde, was die Formel ist.
Sie können auch Erweiterungsmethoden verwenden, aber das Ergebnis wird unnatürlicher aussehen (mit einem möglichen zusätzlichen Funktionsaufruf, auch wenn es wahrscheinlich weggestrichen ist):
%Vor%Und benutze:
%Vor%