Laden...

Methode mit gleichen Namen, mit und ohne Rückgabewert

Erstellt von plongo vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.407 Views
P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren
Methode mit gleichen Namen, mit und ohne Rückgabewert

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

460 Beiträge seit 2004
vor 17 Jahren

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.

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

564 Beiträge seit 2006
vor 17 Jahren

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 😁 :]

49.485 Beiträge seit 2005
vor 17 Jahren

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

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

564 Beiträge seit 2006
vor 17 Jahren

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 😁 :]

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

G
38 Beiträge seit 2006
vor 17 Jahren

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.

49.485 Beiträge seit 2005
vor 17 Jahren

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

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

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

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

T
73 Beiträge seit 2004
vor 17 Jahren

morgen,

du kannst aber auch einen rückgabewert überladen:



public void Methode()
{
}

public void Methode(out string xyz)
{
}


P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

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

P
plongo Themenstarter:in
123 Beiträge seit 2006
vor 17 Jahren

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

270 Beiträge seit 2005
vor 17 Jahren

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! =)

49.485 Beiträge seit 2005
vor 17 Jahren

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

270 Beiträge seit 2005
vor 17 Jahren

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

G
38 Beiträge seit 2006
vor 17 Jahren

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.