2010-02-11 8 views
7

Ich habe eine Erweiterungsklasse für System.Net.IPAddress und ich wollte die binären Operatoren >, <, == überladen, aber der Compiler sagt mir, dass ich diese Operatoren in einer statischen Klasse, die ich für meine andere Erweiterung haben muss, nicht überlasten kann Methoden. Gibt es einen besonderen Grund dafür?Warum können Operatoren in einer statischen Klasse nicht überlastet werden?

Danke.

+0

Wir überlegten, C# 4 "Erweiterungsoperatoren" hinzuzufügen, aber sie passten nicht in das Budget und wurden gekürzt. Hoffentlich werden wir sie in eine hypothetische zukünftige Version der Sprache bringen. –

+0

@Eric: Ich würde hoffen, dass Sie sie in eine "echte" zukünftige Version bringen! :) Ich habe von funktionaler Programmierung gehört, aber keine hypothetische Programmierung! Ist das ein neues Paradigma? –

+0

@Chris Dunaway: Ja, jetzt ist es besser bekannt als "Quantenprogrammierung". – jason

Antwort

12

Operatoren müssen sich auf Instanzen des Typs beziehen, in dem sie deklariert sind. Da Sie keine Instanzen einer statischen Klasse haben können, ist es nicht sinnvoll, Operatoren zu definieren.

Es gibt keine "Erweiterungsoperatoren" in .NET.

für Ihre Zwecke prüfen, um eine Durchführungs IComparer<T> (deckt < und >) und/oder IEqualityComparer<T> (deckt ==, oder Sie Macht einfach vergleichen 0 Rückkehr verwenden, es hängt davon ab, ob Sie „sortiert gleich“ und „gleich“ betrachten wie dasselbe).

+0

Sie haben sogar Jon Skeet entfernt seine Antwort –

+0

@Jan - nun, meine war 50 Sekunden früher auch; -p –