C # -Operatoren als Funktionen

8

Gibt es eine Möglichkeit, Operatoren als Funktionen zu verwenden, ohne sie manuell zu deklarieren?

%Vor%

Ähnlich wie (+) / (-) in Haskell. In verschiedenen LINQ-Szenarios mit konditionalen Abfragekonstruktionen wäre dies hilfreich. Vielleicht ein C # (4.0+) Trick, von dem ich nichts weiß.

Bearbeiten: Hier ist ein Beispiel, um zu verdeutlichen, was ich meine:

%Vor%

Ein gewöhnlicher Anruf wäre:

%Vor%

wäre ein cooler Call (unter der Annahme von Haskell Style):

%Vor%     
UserControl 01.12.2011, 14:23
quelle

3 Antworten

6

Nein.

Sie können die Definitionen (F12 in VS) für die Operatoren finden, die Sie überladen können, und es gibt ein

%Vor%

Aber es gibt keine Möglichkeit, Double.operator==(a, b) aufzurufen.

Das Framework bietet eine a.Equals(b) für diesen speziellen Fall, aber es gibt keine a.Add(b) .

    
Henk Holterman 01.12.2011, 14:34
quelle
3

Zu dokumentarischen Zwecken: benutzerdefinierte Operatoren sind Funktionen, jedoch verbietet die C # -Sprache ausdrücklich explizite Aufrufe (die Grundprinzipien sind nicht bekannt). Zum Beispiel:

%Vor%

Wenn Sie IL schreiben würden, würden Sie Folgendes schreiben:

%Vor%     
sehe 01.12.2011 14:46
quelle
1

Wenn ich verstehe, was Sie richtig machen wollen, können Sie mit System.Reflection und Delegate.CreateDelegate einen Delegaten für die Operatormethode erstellen.

Natürlich habe ich es nie getestet, aber Operatormethoden sind Methoden , also sollte es funktionieren. Dies könnte auch automatisiert werden (um Zeit zu sparen im Vergleich zur direkten Methode).

Siehe:

Ссылка

    
Felix K. 01.12.2011 14:42
quelle