Polymorphie von Operatoren in C♯
Die Implementation enthält drei verschiedene Programme für einen Typwechsel: Das Programm »-int« kann das Vorzeichen eines int-Wertes wechseln, das Programm »-double« das Vorzeichen eines double-Wertes und das Programm »-decimal« das Vorzeichen eines decimal-Wertes.
Wenn der Ausdruck »-2« ausgewertet werden soll, dann bildet die Implementation zunächst die Signatur dieses Ausdrucks. Das ist »-int«. Anschließend wird das passende Programm »-int« gestartet, um das Vorzeichen zu ändern. Entsprechend geschieht dies auch für Ausdrücke der beiden anderen Typen »double« und »decimal«.
- Polymorphie: zum Operator »-« gehören zwei verschiedene Programme
- »-2« --> -int --> Vorzeichenwechselprogramm für int-Werte
- »-2.3« --> -double --> Vorzeichenwechselprogramm für double-Werte
- »-2.3m« --> -decimal --> Vorzeichenwechselprogramm für decimal-Werte
Der Programmierer muß also nicht selber das passende Programm für den Operator »-« festlegen, sondern es wird an Hand des Typs des Operanden von der Implementation automatisch richtig ausgewählt.
Die Fähigkeit eines Operators, wie »-«, für mehrere Programme zu stehen, die dann an Hand des Typs des Operanden ausgewählt werden, wird Polymorphie genannt, und der zugehörige Operator wird auch als polymorph bezeichnet.
Man sagt auch manchmal, der Operator sei überladen, also mit verschiedenen Bedeutungen für verschiedene Typen „beladen“, und nennt diese Überladung eines Operators Operatorüberladung.
Unter Auflösung verstehen wir, bei einer Mehrdeutigkeit zu erkennen, welche der möglichen Bedeutung genau vorliegt. Eine Überladungsauflösung besteht darin, bei einer Überladung zu erkennen, welche der verschiedenen Bedeutungen des Überladenen vorliegt.
Datentypen erlauben es, zu erkennen, ob die Anwendung eines Operators auf einen Ausdruck überhaupt zulässig ist. So kann »-"2"« als Fehler erkannt werden. Außerdem erlauben es Datentypen, wenn die Anwendung als zulässig erkannt wurdem, dem Operator das richtige Programm zuzuordnen, wie eben erklärt wurde. Ohne Datentypen und Polymorphie müßte der Programmierer diese Arbeit erledigen, indem er für int-Numeralia einen anderen Operator verwendet als für double- oder decimal-Numeralia.
- Ohne Polymorphie wären verschiedene Operatorzeichen notwendig
- − 65
⊖ 65.0 - ⊟ 65m
Die Polymorphie „versteckt“ den genauen Typ eines numerischen Operanden gewissermaßen vor dem Programmierer. Dieser muß sich keine Gedanken darüber machen, ob ein Operand den Typ »int«, »double« oder »decimal« hat, denn er kann den Operator »-« gleichermaßen verwenden.