2010-02-23 11 views
5

Mögliche Duplizieren:
Why must C# operator overloads be static?Warum Static Schlüsselwort vor der Funktion Signatur

Warum Static Schlüsselwort vor der Funktion Unterschrift aller überladenen Operatoren in C# wie:

public static void operator = (Objekt a, Objekt b)

Wenn wir d oing a = b; dann wird ein Wert implizit richtig übergeben. Daher ist kein statisches Schlüsselwort erforderlich. Es muss sein, wie:

public void operator = (Object b)

Ist es das?

+0

Dieser Beitrag könnte mehr Licht auf die Sache werfen: http://stackoverflow.com/questions/2018108/why-must-c-operator-overloads-be-static/ –

Antwort

9

Die Tatsache, dass Operatoren statisch sind, ermöglicht die Verwendung in Situationen, in denen Nullwerte vorhanden sind. Es betont auch die Tatsache, dass die Operatoren nicht polymorph angewendet werden. (Sie möglicherweise könnten angewandt werden polymorph, wenn sie nicht statisch waren zwar ... aber überwiegende wäre generell eine schlechte Idee sowieso IMO sein.)

(Beachten Sie, dass Sie nicht den Zuweisungsoperator in C# überlasten können sowieso .)

+0

Beachten Sie, dass Sie den Zuweisungsoperator nicht überladen können in C# sowieso Warum? – Sunil

+0

@Sunil: Weil es in Bezug auf Lesbarkeit böse ist und böse Ecken hat, IIRC. Sie können jedoch eine implizite Konvertierung bereitstellen, die den meisten Fällen gerecht wird, in denen Sie den Zuweisungsoperator überladen möchten. –

0

Andernfalls würden Sie immer eine Instanz des Objekts benötigen, um das auszuführen. Was Sie im Fall a oder b nicht haben könnten, ist null.

Verwandte Themen