Entwickler-Ecke

C# - Die Sprache - Was bedeutet das Schlüsselwort RETURN?


Csharp-programmierer - Do 25.06.15 19:49
Titel: Was bedeutet das Schlüsselwort RETURN?
Hallo Leute. Mir begegnet sehr oft das Schlüsselwort "return" und ich weiß überhaupt nich, was dies bedeutet. z.B. in folgenden Beispielen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
try
{
if(this.textBox1.Text == "0")
{
 //...
}
}
catch
{
retutn;
}


oder:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
string name
{
  get
{
return Name;
}
set;
}


oder im Letzten Beispiel:


C#-Quelltext
1:
2:
3:
4:
5:
if(variable1.IndexOf("H") == -1)
{
 this.BackColor = Color.Red;
 return variable2;
}


Könntet ihr das vielleicht einmal zusammenfassen, was return bewirkt;
MFG :)


Moderiert von user profile iconTh69: Topic aus Algorithmen, Optimierung und Assembler verschoben am Do 25.06.2015 um 20:53


Yankyy02 - Do 25.06.15 20:00

Hallo Csharp-programmierer,

Ich glaube dieser http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_03_005.html#dodtpb97c7201-8c81-448d-a170-dd3e640b1b66 Link sollte alles erklären.

LG


Mathematiker - Do 25.06.15 20:00

Hallo,
user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Könntet ihr das vielleicht einmal zusammenfassen, was return bewirkt;

Super. Obwohl ich von C# keine Ahnung habe, weiß ich dieses Mal etwas. :lol:
Return beendet die Funktion und gibt evtl. die nachfolgende Variable als Wert zurück.

siehe auch https://msdn.microsoft.com/de-de/library/1h3swy84.aspx

Beste Grüße
Mathematiker

Mist! Sekunden zu spät. Ich wollte doch der Erste sein. :(


Delete - Do 25.06.15 21:02

Ich habe schon befürchtet, dass https://www.uni-trier.de/fileadmin/urt/doku/csharp/v40/csharp4.pdf nicht mehr funktioniert...
Einführung in das Programmieren mit C# 4.0, 751 Seiten...
Insgesamt 197 Instances of Return:
Seite 75:
Seite 167: Return
u.s.w.


Csharp-programmierer - Di 30.06.15 20:22

Und wir genau bekomme ich dann den Rückgabewert?


Christian S. - Di 30.06.15 20:40

z.B. so:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public int Square(int x) {
    return x*x;
}


/* ... */
int foo = 4;
int fooQuadrat = Square(foo);



Oben ist eine Funktion (Square) definiert, die das Quadrat einer Zahl zurückgibt. Unten wird diese Funktion aufgerufen und der Rückgabewert wird der Variable "fooQuadrat" zugewiesen, um weiter benutzt zu werden.


Csharp-programmierer - Do 02.07.15 20:29

Vielen Dank für die hilfreichen Antworten, aber was bedeutet es, wenn einfach nur return; da steht?
MFG :)


Christian S. - Do 02.07.15 20:50

Dann hat die Methode keinen Rückgabewert (ansonsten würde der Compiler ein "return" ohne Wert nicht akzeptieren) und wird einfach nur sofort an der Stelle verlassen.


OlafSt - Fr 03.07.15 12:28

Manchmal scheint es echt schwierig zu sein, den Cursor auf das Wort "return" zu stellen und F1 zu drücken...

No offense.


Csharp-programmierer - Fr 03.07.15 23:07

Und was bedeutet es, wenn nur
return true; da steht?


Christian S. - Sa 04.07.15 00:17

Dass der Wert "true" zurückgegeben wird :roll:


Csharp-programmierer - Fr 24.07.15 22:50

Vielen Dank :)

Aber wo liegt hier der Fehler? return wird dabei rot unterstrichen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 class MyFirstClass
        {
            public int x { get; set; }
            public int y { get; set; }

            public MyFirstClass(int xx, int yy)
            {
                this.x = xx;
                this.y = yy;

                return (xx * yy);
            }
        }


Und dann:


C#-Quelltext
1:
2:
3:
4:
5:
6:
private void button1_Click(object sender, EventArgs e)
        {
            MyFirstClass class1 = new MyFirstClass(1011);
            int x1 = class1.x;
            int abc = MyFirstClass(1011);
        }


Vielen Dank schonmal im Vorraus ;D


Ralf Jansen - Fr 24.07.15 23:00

Das ist ein Konstruktor und keine Methode wie jede andere. Wie du dem Syntax des Konstruktor ansiehst hat die keinen Return Typ (vor dem Namen der Konstruktormethode der gleich dem Klassenname ist steht ja nix). Der Return Typ des Konstruktor ist die Klasse die es erzeugt hier implizit eine Instanz der Klasse MyFirstClass. Darum funktioniert die erste Zeile in deinem button1_Click Handler. Im Konstruktor sieht man üblicherweise nie einen return und wenn dann ohne Typ (den wie gesagt der Typ steht schon fest und muss nicht mehr genannt werden).

Wie du darauf kommst das die 3.te Zeile in button1_Click irgendwie Sinn macht erschließt sich mir nicht. Vielleicht kann mann dir da helfen wenn du uns mal erklärst warum du denkst das das so gehen müsste. Vielleicht erkennen wir dann denn Denkfehler in deinem Metamodel.


Csharp-programmierer - Fr 24.07.15 23:27

Ich kam wegen der 3. Zeile so drauf:

Ein Vorgänger, der auf diese gesamte Frage geantwortet hat hat ein Beispiel gemacht:


C#-Quelltext
1:
2:
3:
4:
public int x(int y)
{
return y * y;
}


Und dann zum Auslesen:

C#-Quelltext
1:
2:
int a = 4;
int Quadrat = x(a);


Und so wird halt das Quadrat der Zahl gebildet.
Da ich mich absolut noch nie mit Klassen beschäftigt (gescheige dem Vererbung) habe, ist es nun höchste Zeit dafür. Ich dachte, es wäre ein schönes Beispiel um damit anzufangen. Ich dachte wenn ich ich gebe dem einen Parameter 10 und dem anderen 11, damit sich dann die beiden Zahlen addieren und ich so an das Ergebnis rabkomme. Leider funktioniert das in der Praxis jedoch nicht.

Leider verstehe ich auch Ihre Formulierung nicht (wegen der Fachsprache). Könnten Sie mir vielleicht einen Codeausschnitt für dieses Problem geben?

MFG ;)


C# - Sa 25.07.15 02:00

Hallo,

der Konstruktor ist zum erstellen von Objekten da. Wenn ein neues Objekt erzeugt wird (z.B. MyFirstClass class1 = new MyFirstClass(1011);) dann wird genau hier die Konstruktorfunktion public MyFirstClass(int xx, int yy) aufgerufen. Diese ist aber dafür da, um Variablen und Co. in dem Objekt selber zu initialisieren. Wenn du nun mit der Klasse was berechnen willst musst du dafür Methoden definieren:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
class MyFirstClass
{
  public int x { get; set; }
  public int y { get; set; }

  public MyFirstClass(int xx, int yy)
  {
    this.x = xx;
    this.y = yy;

    return (xx * yy);
  }
  
  public int Sum() 
  {
    return x + y;
  }
  
  public int Product()
  {
    return x * y;
  }  
}


und aufrufen kannst du sie dann (z.B. in deiner Button-Methode) so:

C#-Quelltext
1:
2:
3:
4:
5:
6:
private void button1_Click(object sender, EventArgs e)
{
  MyFirstClass class1 = new MyFirstClass(1011);
  int sum = class1.Sum();
  int product = class1.Product();
}


Wirklich Sinn machen tut die Klasse in diesem Fall natürlich nicht, da man auch einfache Funktionen schreiben kann und keine Klasse dafür schreiben muss:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public int Sum(int x, int y) 
{
  return x + y;
}

public int Product(int x, int y)
{
  return x * y;
}

private void button1_Click(object sender, EventArgs e)
{
  int sum = Sum(1011);
  int product = Product(1011);
}


Csharp-programmierer - Sa 25.07.15 09:55

Vielen Vielen Dank für Ihre sehr hilfreiche Antwort. Eine Frage habe ich jedoch noch: Was ist dann jetzt eigenrlich der Sinn von Klassen?
MFG :D


Th69 - Sa 25.07.15 11:16

Hallo,

die Grundlagen der C#-Programmierung solltest du dir schon selbst beibringen, z.B. über ein (Online-)Buch wie Visual C# 2012 [http://openbook.rheinwerk-verlag.de/visual_csharp_2012/]. Und deine letzte Frage solltest du durch Lesen des Kapitels 3 Das Klassendesign [http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_03_001.html#dodtpf766d18e-5ded-46aa-8e8e-625d86cb0d78] ff. dann beantworten können. Bei Detailfragen dazu erstelle aber bitte ein neues Thema.