| 

.NET C# Java Javascript Exception

4
Wenn man in C# einen Operator überlädt, kann man ja den Rückgabewert ändern. Also den Typ. Von bool zu int oder so. Warum funktioniert das für Operatoren und nicht für normale Methoden? Ich dachte immer, Operatoren sind einfach nur statische Methoden mit einem speziellen Namen? Aber normale Methoden kann ich zwar überladen, aber nicht nur den Rückgabetyp ändern – warum?
News:
20.05.2011
Was meinst du mit Rückgabetyp ändern? Also ich hab Probleme mit dem Verständnis deiner Frage. Ich würde mich auch erst ma pauschal dem Standpunkt anschließen, dass das, was in Operator "kann", eine Methode auch kann.
Achso 20.05.2011
Ich glaube, er meint, dass Du bei einem Operator einen x-beliebigen Rückgabetyp definieren kannst.
Golo Roden 22.05.2011
2 Antworten
2
Das Problem sind die impliziten und expliziten Type-Castings:

Ein Beispiel, gegeben sind 3 überladungen der Funktion "getVehicle" die alle ein Objekt zurückliefern:

function Car getVehicle(string name){ ... }
function Bus getVehicle(string name){ ... }
function Truck getVehicle(string name){ ... }


Nun ein Methodenaufruf mit expliziten Casting:

var x = (Vehicle)getVehicle("AUTO");


Welche der 3 Methoden soll denn nun aufgerufen werden?

Zweites Beispiel:

function int parse(string a) { return int.Parse(a); }
function float parse(string a) { return float.Parse(a); }


Nun ein Methodenaufruf mit impliziten Casting:

double a = parse("1.0");


Welche Methode soll nun aufgerufen werden? Da sich sowohl int als auch float implizit in double casten lassen.
21.05.2011
Floyd 14,6k 3 9
Was hat die Antwort mit Operatoren zu tun?
Golo Roden 22.05.2011
1
Die Frage war: "Warum funktioniert das für Operatoren und nicht für normale Methoden?"
DaSpors 23.05.2011
Die Ausführung waren mehr als Erweiterung und Erklärung zu dem Stackoverflow-Artikel den ralf gepostet hat gedacht, da dieser bereits sehr gut erklärt warum es überhaupt (nur) bei Operanten geht.
Floyd 23.05.2011
1
Hi,
wenn Du meinst, dass du eine Methode dadurch überladen kannst, indem du die Aufrufsignatur beibehältst und sich die Methoden nur anhand des Rückgabewertes unterscheiden, dann geht das mit C# nicht. Es wird nicht untersützt.
Lustigerweise ist es aber direkt in IL möglich.
Und weils mich jetzt selbst interessiert hat, warum das von C# nicht unerstützt wird, habe ich den recht gut erklärenden StackOverFlow Artikel gefunden.
Grüße Ralf
20.05.2011
ralf.hientzsch 637 1 7
Für Operatoren geht das aber - hier kann man den Rückgabetyp beliebig definieren.
Golo Roden 22.05.2011
Ja, das stimm.
ralf.hientzsch 22.05.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH