Warum benötigt C# Operatorüberladungen als statische Methoden und nicht als Elementfunktionen (wie C++)? (Vielleicht genauer: Was war die Motivationsmotivation für diese Entscheidung?)Warum müssen die Überladungen von C# -Operatoren statisch sein?
Antwort
Werfen Sie einen Blick auf this post.
Eine Reihe von Gründen, die primär scheint, Operator Symmetrie zu erhalten (so dass die linke Seite einer binären Operation keine spezielle Behandlung, als für die Verteilung der Operation verantwortlich) zu erhalten.
in allen Einzelheiten beantwortet hier:
Es gibt auch eine andere subtiler Punkt, um Werttypen und Operatoren Instanz ist. Statische Operatoren machen diese Art von Code möglich:
So können Sie den Operator aufrufen, obwohl die Referenz null ist. Dies wäre für Instanzoperatoren nicht der Fall.
Vielleicht ist es am besten zu überlegen, warum die Methoden nicht statisch sein sollten. Es besteht keine Notwendigkeit für den Staat und damit für dieses.
Es könnte nicht ein Vorteil des Staates sein, aber virtuelle Überladung wäre cool. Das State-Ding ist nicht der Grund, warum es in C# nicht verfügbar ist. –
C++ ermöglicht Betreibern freie (dh nicht Mitglied) Funktionen. Aber C# entschied sich dafür, ein Stalinian-Verbot für freie Funktionen einzuführen, also musst du dort statisch bleiben. –