2010-01-07 4 views
19

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?

+0

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. –

Antwort

26

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.

30

in allen Einzelheiten beantwortet hier:

http://blogs.msdn.com/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx

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.

+0

gonna geben Sie den grünen Scheck zu @Sapph nur weil Sie haben waaaay mehr rep :) – dkackman

+0

lol ich sah den rep gehen und dann für eine Sekunde nach unten. Gut verdient, Sapph legte mehr Mühe in die Antwort. –

+3

+1 für ausgezeichnete Code-Snippet: D – Sapph

0

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.

+0

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. –