C# – Methoden Teil 1

C# Anleitung

Methoden in C# Teil 1

Voraussetzung:

• C# – Arrays

Anwendungsbeispiel:

Du möchtest an verschiedenen Stellen im Programm den selben Code-Abschnitt immer wieder aufrufen ohne ihn zu kopieren.
In diesem und mehr Fällen sind Methoden die richtige Wahl.

Tutorial Methoden

Wie im Anwendungsbeispiel angedeutet werden Methoden dafür verwendet, sich wiederholender Code an nur eine Stelle zu schreiben.
Als Programmierer ziehst Du daraus gleich mehrere Vorteile. Zum einen ersparst Du Dir Schreibarbeit, aber auch andere Aspekte wie vereinfachtes Testen von Algorithmen, bessere Lesbarkeit und Fehlervermeidung beim Kopieren werden durch Methoden unterstützt.
Gewöhne Dir also möglichst schnell an, so gut es geht Deine Funktionen in Methoden zu schreiben.

Methoden gehören eigentlich nicht mehr zu den Grundlagen, sondern schon zum Klassendesign, welches das nächste Kapitel sein wird. Ich habe mich allerdings dafür entschieden einfache Methoden noch zu den Grundlagen hinzuzunehmen, da ich Methoden als einen elementaren Baustein der C#-Programmierung ansehe.

Ich erkläre hier nur die grundlegende Methode. Im nächsten Kapitel „Klassendesign“ werde ich ein weiteres Tutorial über Methoden schreiben, das sich mit allen Aspekten der Methode befasst.
Das hat den Grund, dass einige Begriffe und Konzepte bis hier noch nicht erklärt wurden, aber gebraucht werden um alles über Methoden zu verstehen. Allerdings kann man meiner Meinung nach nicht früh genug anfangen Code in Methoden zu schreiben.

Aufbau einer einfachen Methode

Eine einfache Methode setzt sich zusammen aus den Zugriffsmodifizierern, dem Rückgabetyp, dem Bezeichner, den Übergabeparametern und dem Anweisungsblock.

Als Code sieht eine einfache Methode z.B. folgendermaßen aus:

Mit den verschiedenen Zugriffsmodifizierern beschäftigen wir uns in einem späteren Tutorial, da sie im Moment noch nicht wichtig sind, gehe ich hier auch noch nicht auf sie ein.
In diesem Beispiel ist der Zugriffsmodifizierer das Schlüsselwort public, welchen Du vorerst auch benutzen solltest.

Darauf folgt der Rückgabetyp. Dieser beschreibt welchen Datentyp die Methode zurückgibt. Zulässig sind alle Datentypen sowie Objekte von Klassen (Klassen und Objekte werden im nächsten Kapitel erklärt).

Wenn man keinen Datentyp zurückgeben möchte wird, wie in diesem Beispiel, das Schlüsselwort void (Englisch „Leere“) verwendet.

Nun folgt der Bezeichner. Wie auch bei den Variablen ist der Bezeichner der Name über den wir die Methode ansprechen.
Der gute Programmierstil verlangt, dass Methodennamen selbsterklärend sind, sprich sie machen eine genaue Aussage über die Funktion der Methode.
Ausserdem sollten Methodennamen mit einem großen Buchstaben beginnen. Wenn er sich aus mehreren Begriffen zusammen setzt, sollten zur besseren Lesbarkeit die einzelnen Begriffe auch mit Großbuchstaben beginnen. Leerzeichen sind auch hier nicht erlaubt.

Nach dem Bezeichner stehen in einfachen Klammern die Übergabeparameter. Sie sind dafür da, der Methode Werte zu übergeben mit der sie rechnen kann.
Auch hier sind alle Datentypen sowie Objekte von Klassen zulässig.
Wenn Du keine Werte übergeben möchtest, kannst Du entweder wieder void schreiben oder die Klammern leer lassen. Die Klammern selbst sind aber erforderlich.

Anders als bei Kontrollstrukturen und Schleifen sind die geschweiften Klammern, die den Anweisungsblock darstellen bei einfachen Methoden Pflicht. Auch wenn nur eine Programmzeile folgt.

Methoden müssen immer innerhalb einer Klasse (class) und außerhalb anderer Methoden (z.B. main) deklariert werden.

 

Rückgabewert im Detail

Wenn Du eine Methode zum Berechnen von Werten benutzt, willst Du mit aller Wahrscheinlichkeit das Ergebnis herausbekommen.

Der Rückgabetyp bestimmt, wie oben beschrieben, welcher Datentyp dieses Ergebnis hat.

Wenn eine Methode einen anderen Rückgabewert als void hat, muss auch ein solcher Datentyp „ausgespuckt“ werden.

Du musst dem Compiler allerdings sagen welchen Wert er zurückgeben soll.
Das Schlüsselwort in C# um im Anweisungsblock einen bestimmten Wert zurückzugeben ist return.

Mit return wird die Methode beendet und der Wert hinter dem return wird zurückgegeben.

In diesem Beispiel wird eine extra Variable für das Ergebnis benutzt. Nötig ist das aber nicht, denn ein Integer mit einem Integer multipliziert ergibt wieder einen Integer.
Du kannst also die Rechnung auch direkt hinter das return schreiben. Dadurch sparst Du eine Variable und somit Speicherplatz.

Das Schlüsselwort return sagt dem Compiler nicht nur, welchen Wert die Methode zurückgeben soll. Es beendet die Methode auch.
Daher kannst Du ein return auch bei einer Methode ohne Rückgabetyp (void) nutzen um eine Methode vorzeitig zu beenden. Dies kann z.B. nützlich sein bei Schleifen oder Verzweigungen (if-, switch, usw).

Hier passiert folgendes:

  1. Die Variable ergebnis, bekommt irgendeinen Wert.
  2. Ist ergebnis größer als 5 wird die Methode beendet.
  3. Ist ergebnis kleiner oder gleich 5 wird ergebnis um 2 erhöht und die Methode ist beendet.

Solltest Du an dieser Stelle keine Verzweigung einbauen, sondern stattdessen einfach nur ein return setzen, wird die letzte Zeile nie erreicht. Visual Studio wird Dir dazu auch eine Warnung ausgeben.

Sobald Deine Methode einen Rückgabetyp und Verzweigungen hat, müssen alle Verzweigungspfade auch zu einem return führen. Dabei ist es egal, ob einfach am Ende der Methode ein return steht, in jeder Verzweigung eines oder beides miteinander kombiniert.

 

 

Übergabeparameter im Detail

Oftmals musst Du der Methode einen oder mehrere Werte übergeben, mit denen die Methode rechnen soll.

Als Beispiel: Du möchtest eine Methode schreiben um eine Zahl mit sich selbst zu multiplizieren. Da Du bei der Entwicklung noch nicht weißt, welcher Wert quadriert werden soll, arbeitet man hier mit Variablen.
Diese Variablen müssen der Methode mitgegeben werden.

Solche mitzugebenden Werte werden Übergabeparameter genannt. Sie werden in den normalen Klammern hinter den Bezeichner geschrieben. Auch hier sind die Datentypen gefordert, allerdings anders als beim Rückgabetyp werden hier Variablenbezeichner gefordert. Denn im Grunde werden hier normale Variablen angelegt. Das bedeutet, hier gelten die selben Regeln wie beim Anlegen einer Variable.

Wenn Du mehrere Werte übergeben möchtest, musst Du sie mit einem Komma trennen. Hier musst Du aber für jede Variable den Datentyp angeben. Du kannst also nicht Variablen mit dem selben Datentyp zusammenfassen.

Du kannst auch Arrays übergeben ohne zu wissen wie viele Zellen das Array besitzt.
Die Größe und der Inhalt der Zellen wird automatisch übernommen.

Innerhalb der Methode kannst Du nun auf diese Übergabeparameter zugreifen und mit Ihnen arbeiten.

Eine Methode aufrufen

Nun weißt Du wie Du einfache Methoden erstellst, einen Wert zurück gibst und Werte der Methode übergibst. Aber wie verwendest Du sie jetzt?

Wenn Du diese Tutorialreihe von Anfang an mitgemacht hast, dann hast Du bereits schon zwei Methoden aufgerufen: WriteLine und ReadLine der Klasse Console.

Kein Sorge, Du musst jetzt nicht das alte Projekt laden oder die Seite aufrufen.

Eine Methode rufst Du auf, indem Du lediglich den Bezeichner der Methode eingibst und dahinter die Klammern mit den zu übergebenden Werten.

Wie Du siehst, steht hier noch zwischen public und void das Schlüsselwort static. Das hat einen Grund, der im zweiten Methoden-Tutorial im Kapitel Klassendesign erklärt werden wird. Aktuell musst Du nur wissen, das liegt daran, dass deine Methode EinfacheMethode in der selben Klasse wie die Main-Methode steht.

Innerhalb der Main-Methode rufst Du Deine Methode auf und in den Klammern stehen die Übergabewerte. Diese werden in der eingegeben Reihenfolge in die Variablen der Methode gespeichert. Hier wird also die Zahl 3 in die Variable zahl und die Zahl 2 in die Variable multiplikator geschrieben.

Alternativ können auch Variablen übergeben werden.

Dabei solltest Du wissen, dass bei Variablen eine Kopie der Originalen erzeugt wird. Das bedeutet, wenn Du innerhalb der Methode den Wert von z.B. zahl veränderst, wird die Variable meineZahl nicht verändert.

Bei Objekten wird nicht der Wert sondern eine Referenz übergeben und somit das Originalobjekt verändert.
(Objekte und Referenzen werden in einem späteren Tutorial erklärt)

Wenn Du einen Wert aus der Methode zurück bekommst kannst Du diesen in eine Variable speichern.

Oder auch direkt weiter verarbeiten.

 

Um nun zu sehen, ob Deine Methode auch das Erwartete macht, kannst Du noch eine Konsolenausgabe einbinden.

Methodenüberladung

Früher oder später wirst Du an einen Punkt kommen, an dem Du von einer Methode zwei verschiedene Versionen brauchst. Dabei kannst Du entweder eine neue Methode mit einem anderen Namen oder eine zweite Methode mit dem selben Namen anlegen. Wenn Du eine zweite Methode mit dem selben Namen anlegst müssen die Übergabeparameter verschieden sein. Denn Methoden werden vom Compiler durch den Bezeichner und die Übergabeparameter unterschieden.

So etwas nennt man Methodenüberladung oder auch überladene Methoden.

Wenn Du die gleichen Übergabeparameter nutzen möchtest gibt es einen kleinen Trick, der allerdings nur funktioniert, wenn Du mindestens 2 unterschiedliche Datentypen übergibst.

Du kannst dafür einfach die Reihenfolge der Parameter ändern. Aber Achtung: Du solltest Dir im Klaren sein, dass dies die Unterscheidung als Programmierer uneindeutig macht. Wenn Du diesen Trick nutzt, solltest Du auf jeden Fall per Kommentare dokumentieren welche Methode was macht!

Diese Methoden haben so natürlich keinen Nutzen, sie dienen nur zur Veranschaulichung.

Namenskonflikte lösen

Ein weiteres Problem, welches Dir früher oder später über den Weg laufen wird ist, dass Du eine Variable angelegt hast und einen Übergabeparameter einer Methode gleich nennen möchtest.

Auch hier hast Du zwei Möglichkeiten:

  1. Die Variablen unterschiedlich nennen
  2. Die Variablen gleich nennen

Wenn Du die Variablen gleich nennst, musst Du dem Compiler allerdings sagen welche von beiden Variablen Du in der Methode meinst, denn ansonsten wird der Compiler immer die gleiche nutzen: die Variable des Übergabeparameters.

Hier kommt das Schlüsselwort this zum Einsatz.

Mit this weiß der Compiler, dass hier die Objektvariable gemeint ist, also die Variable, die nicht innerhalb der Methode angelegt wurde. Nach dem this folgt die Punktnotation und dann die Variable.

Übe den Umgang mit einfachen Methoden und experimentiere ein wenig herum. Wie schon oben geschrieben, sind Methoden sehr wichtig.

Damit wäre das Grundlagen Kapitel für C# abgeschlossen. Ich werde noch einen Beitrag mit verschiedenen Übungsaufgaben erstellen und Beispiellösungen dafür.
Denn durch reine Theorie und abtippen lernt man nicht viel. Erst durch das eigene Überlegen, an Probleme stoßen und diese zu lösen bringen einen wirklichen Lernerfolg.

Ich hoffe ich konnte Dir die C#-Grundlagen gut vermitteln. Um meine Tutorials in Zukunft besser machen zu können, würde ich mich über Anregungen, Lob und konstruktive Kritik freuen.

 

Zu den Übungsaufgaben >> Übungsaufgaben Grundlagen

Vielleicht gefällt Dir auch...

3 Antworten

  1. 23. Februar 2015

    […] C# – Methoden Teil 1 […]

  2. 24. Februar 2015

    […] daran, Deiner Methode den Zugriffsmodifizierer static zuzuweisen. Wie im Tutorial Methoden in C# Teil 1 […]

  3. 14. September 2015

    […] C# – Methoden Teil 1 […]

Schreibe einen Kommentar