Hallo,
kurze Frage ich eine Methode, einmal und einmal ohne Rückgabewert.
public void ExecuteOracleNonQuery() {
...
}
public OracleString ExecuteOracleNonQuery() {
...
}
Leider erhalte ich beim kompilieren meiner Klasse einen Fehler:
Der Typ "System.Access.Database" definiert bereits einen Member namens "ExecuteOracleNonQuery" mit den gleichen Parametertypen.
Klar ich verstehe natürlich warum dieser Fehler auftritt.
Meine Frage ist, wie ich innerhalb meiner Klasse diese beiden Typen deklarieren muss, damit Klasse kompiliert werden kann. Welche Modifizierer benötige ich dort?
Ich habe schon gesucht, konnte aber noch nichs gutes finden. Ich weiss auch nichts direkt nach was ich suchen soll bzw. wie ich diese nennen soll.
Danke
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
2 Funktionen mit gleichem Namen wird auch nicht gehen. Als unsaubere Lösung könntest du einer der Funktionen ein bool x als Übergabeparameter hinzufügen, somit unterscheiden sich die Funktionen und es gibt keine Fehlermeldung.
Hi, danke für deine Antwort.
Es ist ja möglich Funktionen zu überladen...
public void send() {
..
}
public void send(bool test) {
...
}
oder eben mit rückgabewert:
public string test() {
..
}
public string test(bool test) {
...
}
nur in meinen Fall nicht, das die Methoden sich ja unterscheiden, da die eine rückgabe hat und die andere nicht!
Ich würde diese gerne, wenn mögich so machen. Da ich auch die Methode anwenden willst ohne einen Rückgabewert zu haben.
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
Hi plongo!
Schaue dir mal das Thema Methodenüberladungen an. Methoden mit gleichen Namen werden aufgrund ihrer Parameterstruktur unterschieden. (das sind Überladungen). Du könntest es so machen wie jan223 geschrieben hat, was auch ich bevorzugen würde. Der Vollständigkeit halber würde es aber auch gehen, wenn du 2 Parameter miteinander vertauschst, so dass sie an anderer Stelle stehen.
der Marcel
EDIT: @plongo, sorry hatte deinen zweiten Beitrag noch nicht gesehen. Füge für die Methode mit Rückgabewert noch einen bool-Wert in die Parameterstruktur ein. Oder du benennst die Methoden eben anders... 😉
:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]
Hallo plongo,
nur in meinen Fall nicht, das die Methoden sich ja unterscheiden, da die eine rückgabe hat und die andere nicht!
da beim Aufruf der Rückgabewert ignoriert werden kann/darf, reicht der Rückgabewert zur Unterscheidung nicht. Die Methoden müssen sich beim Überladen - wie schon gesagt - in der Parameterliste unterscheiden.
herbivore
Ok, danke für eure Antworten.
Bisher habe ich schon mit Überladungen gearbeitet, dort waren dann die Parameterliste unterschiedlich.
Ich dachte das die eine mit und odere ohne Rückgabewert ist, könnte der Compiler dies unterscheiden bzw. über einen bestimmten Modifizierer.
gut ich habe jetzt einfach mal eine Parameter mit angeben und konnte erfolgreich kompilieren!
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
Hi!
Aus deinem Code kann der Compiler nicht sehen, ob du den Rückgabewert willst oder nicht. Also kann er es nicht unterscheiden 😉
der Marcel
:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]
Naja, jetzt bin ich ja schlauer 😁
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
Du kannst ja den Rückgabewert einer Funktion ignorieren wenn du ihn nicht haben willst. Von daher brauchst du auch keine 2 Funktionen, eine reicht vollkommen aus. Einmal verwendest du den Rückgabewert der Funktion und ein anderes Mal nicht.
Hallo Gimley,
es sollen ja wohl überladene Funktionen sein, also sprich unterschiedliche Implementierungen.
Wenn der Implementierungsunterschied nur im Rückgabewert liegt und dieser ohne (spürbaren) Performaceverlust oder Seiteneffekt zu brechnen ist, hast du natürlich recht.
herbivore
Axo also ich kann meine Funktion mit Rückgabewert auch so verwenden das diese nicht einen Exception wirft, wenn ich diese wie folgt verwende.
Db.ExecuteOracleNonQuery()
ohne Zuweisung des Rückgabewerts!
Die beiden Methoden sind bis auf die Rückgabewerte, identisch.
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
Hallo plongo,
ja, der Rückgabewert kann beim Aufruf ohne Nachteile oder gar Exception ignoriert werden. Das steht ja aber auch schon oben mehrfach. 🙂
herbivore
Danke,
sorry! Typisch Anfänger X(
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
morgen,
du kannst aber auch einen rückgabewert überladen:
public void Methode()
{
}
public void Methode(out string xyz)
{
}
ja habe ich gestern bei der ExecuteOracleNonQuery kennengerlernt.
Dieses hat ja zum Vorteil das ich ja gleichzeitig mehrer Rückgaben haben kann oder welche Vorteile hat dies noch?
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
Hallo plongo,
out dient nur zum Zurückgeben von (mehreren) Werten. Weitere Vorteile sind mir nicht bekannt. Wenn man bei einem Wert out statt return verwendet, sehe ich das eher als Nachteil.
herbivore
Ok, danke.
klar die Anwendung sehe ich nur bei mehrere Rückgaben sinnvoll und würde ich auch nur dort verwenden. So wies es eben bei der ExecuteOracleNonQuer-Methode gemacht wird!
Gruss plongo
Woher soll ich wissen, was ich denke, bevor ich höre, was ich sage!
Kurzum: Läufer sind gesünder, "gescheiter" und glücklicher als Nichtläufer.
www.andreas-nicole.de
Ein weiterer Vorteil von out ist dass damit "nicht initialisierte Variablen" übergeben werden können.
siehe:
http://www.galileocomputing.de/openbook/csharp/kap05.htm#Xxx498891
mfg der Hulk! =)
Hallo DerHulk,
das ist kein Vorteil gegenüber return sondern Gleichstand, weil auch bei return
x = f ()
erlaubt ist, ohne das x initialisiert sein muss.
herbivore
Hi, herbivore!
Also wenn ich den Text richtig verstanden habe kann ich mit
public void(out int x, out int y)
{
x = this.x;
y = this.y;
}
auch Werte an die Funktion übergeben die nicht initialiesiert wurden!?!
out dient nur zum Zurückgeben von (mehreren) Werten. Weitere Vorteile sind mir nicht bekannt.
wenn ich da was falsch verstehe, klärt mich auf ?!Wollte eigendlich dies nur erwähnen! 😉
mfg derHulk
Ja, die Werte müssen nicht initialisiert sein, wäre ja auch Käse weil die Werte ja durch die Funktion verändert werden. Aber ein großer Vorteil ist da nicht.