Autor |
Beitrag |
C#
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Fr 24.10.14 08:09
Hey Leute,
bei C# wird beim Überladen von Operatoren ja auf die Parameterreihenflolge geachtet, also z.B.
C#-Quelltext 1: 2: 3: 4:
| Point p = new Point(2, 3); p = 2 * p; p = p * 2; |
Mal abgesehen davon, dass das obige Beispiel eigentlich nicht funktioniert: Gibt es einen Trick damit ich nicht nochmal die ganzen Operatoren überladen muss, nur mit vertauschten Parametern?
Also dass ich nicht das hier machen muss:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| public static Vector operator * (float a, Vector b) { ... }
public static Vector operator * (Vector a, float b) { ... } |
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
Ralf Jansen
Beiträge: 4700
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 24.10.14 09:44
Ich glaube nicht. Ist auch ein Spezialfall für kommutative Operatoren und auch nur dann sinnvoll wenn einer der beiden beteiligten Parameter eindeutig ~höherwertig~ (mir fällt leider kein besseres Wort dafür ein) ist. Im Normalfall würde ich auch immer davon ausgehen das bei solch einer Operation immer der linke Typ rauskommt. Also bei Type A * Type B sollte ein Type A rauskommen. Bei Type B * Type A aber ein Type B.
Ich würde der Vektor Klasse erst mal eine normale Oberfläche geben und die dann für die Operatorenüberladung wiederverwenden (macht das Framework so, z.B in Point, Decimal)
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public static Vector Multiply(Vector v, float f) { ... }
public static Vector operator * (float a, Vector b) { return Multiply(b,a); }
public static Vector operator * (Vector a, float b) { return Multiply(a,b); } |
Für diesen Beitrag haben gedankt: C#
|
|
C#
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Fr 24.10.14 11:16
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
|