Visual C# 2012 Grundkurs

Methods

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Methoden sind ein weiterer Bestandteil einer C#-Klasse und beschreiben das Verhalten einer Klasse. Methoden können statisch oder dynamisch sein sowie wenn gewünscht einen Rückgabewert liefern.

Transkript

In diesem Abschnitt möchte ich mich den Methoden widmen als weitere Mitglieder von "Klasse". Methoden haben wir schon einige kennengelernt. Eine der wichtigsten, die es bei den Konsolenprogrammen gibt, ist die Main-Methode. Sie zeichnet sich dadurch aus, dass Sie statisch ist, also der Klasse zugeordnet ist und nicht einer Instanz dieser Klasse. Damit habe ich schon 2 wichtige Eigenschaften festgelegt: statisch oder nicht-statisch. Dann wollen wir mal schauen, was es sonst noch so gibt. Dieses "void" bedeutet, dass die Main-Methode keinen Rückgabewert hat. Wenn eine Methode einen Rückgabewert haben soll, das wäre z.B. so, schreiben wir "class Calculator". Die hat eine neue Methode, und zwar heißt die "public static int Add". Die nimmt jetzt 2 Parameter: "(int a, int b)". "Return a + b;" Diese Methode, die kann ich jetzt aufrufen. Von meiner Main-Methode aus z.B., kann ich sagen "Calculator.Add(4,6);". Dadurch, dass die Methode statisch ist, kann ich Sie direkt unter Verwendung der Calculator-Klasse aufrufen. Sie hat einen Return-Wert vom Typ "Int", also kann ich all das, was da zurückkommt, "int x =", irgendeiner anderen Variablen zuordnen. Hier habe ich eben, wie gesagt, 2 Parameter definiert. Bei der Parameterdefinition ist es auch immer so wie bei der Variablen- oder der Felddefinition. Hier z.B., dass ich den Typ zuerst schreibe, und dann den Namen. Das zieht sich durch die ganze Sprache durch. Man schreibt immer zuerst den Typ, und dann den Namen. Vor dieser Kombination aus Typ und Namen kommen dann die Modifizierer. In dem Fall habe ich dem Calculator diese Funktion "Add" verpasst und diese Funktion ist hier aufrufbar. Jetzt könnte ich mich entschließen und sagen, ich mache das Ganze nicht statisch, ich brauche eine Calculator-Instanz. Sie sehen, ich kann das auf die Weise schon gar nicht mehr benutzen. Der Compiler, der im Visual Studio immer im Hintergrund läuft und nachschaut, ob der Code noch stimmt oder nicht, der unterringelt mir das gleich als Fehler. Um diese Sache zu lösen, muss ich hier einen Calculator anlegen. Dann kann ich über diese Objektinstanz die Methode "Add" erreichen, und kann darüber meine Addition ausführen. Was in dem Fall nicht so viel Sinn macht, aber einfach nur mal, um den Unterschied zu zeigen zwischen statisch und nicht statisch,. Jetzt gibt es noch eine spezielle Art an Methode in den Klassen. Diese spezielle Art an Methode nennt sich Konstruktor. Sie sehen, das Ganze sieht irgendwie fast so aus, wie wenn ich so eine Art Methode aufrufe, die dann genauso heißt wie die Klasse und diese Methode initialisiert mir eine Klasse. Im Fall von diesem Calculator ist es so, da habe ich gar keinen Konstruktor definiert. Also wird irgendwie so ein Default-Konstruktor hergenommen, der vom System zur Verfügung gestellt wird. Dieser Default-Konstruktor sieht zu, dass er die einzelnen Felder, aus denen eine Klasse besteht, mit ihren eigenen Default-Konstruktoren initialisiert. Das ist im Grunde genommen alles, was er tut. Ich kann aber statt des Default-Konstruktors auch einen Konstruktor schreiben. Tatsächlich ist es so, das wird der häufigste Fall sein bei Ihnen, auch in der Praxis. Ich brauche auch wieder so einen Modifizierer. Dann ist es wie eine Methode ohne Rückgabetyp. Hier würde ja normalerweise bei einer Methoden-Deklaration ein Rückgabetyp stehen. Den brauche ich aber nicht, weil wir sowieso wissen, dass ein Konstruktor immer nur ein Calculator-Object zurückgeben kann ein Objekt des Typs, zu dem der Konstruktor gehört. Es ist wie eine Methodendefiniton, nur dass die Methode genauso heißt wie die Klasse, und dass sie keinen Rückgabetyp spezifizieren braucht. In dem Fall ist es parameterlos. Dieser Konstruktor, da könnte ich jetzt irgendetwas vornehmen. Was weiß ich, wenn ich jetzt irgendeine Variable habe, die könnte ich an der Stelle z.B. initialisieren. Aber ich kann Konstruktoren auch Parameter übergeben. Ich kann z.B. sagen: Hier soll ein "value" reinkommen. Da kann ich dieses "x" z.B. mit diesem "value" initialisieren. Sie sehen, sobald ich so etwas tue, dass ich einen Konstruktor definiere, der irgendwelche Parameter übernimmt, in dem Fall wird sozusagen der Default-Konstruktor unwirksam. Damit funktioniert auch dieser Ausdruck nicht mehr. Der Compiler sagt: "Nein, Moment mal, Junge, für die Klasse "Calculator" ist ein Konstruktor definiert. Der hat leider keine leere Parameterliste. Da musst du mir schon einen Parameter übergeben." Okay, übergeben wir ihm einen Parameter, schreiben wir irgendeinen Wert hier rein. Siehe da, der Compiler gibt wieder Ruhe und man könnte damit dieses Calculator-Objekt initialisieren. Jetzt machen wir ein bisschen ein praktischeres Beispiel, z.B. "class Mitarbeiter", "string name". Jetzt kann ich also einen Konstruktor schreiben, wo ich mit 2 Strings dieses Objekt initialisieren kann. Jetzt ist es so, jetzt habe ich diese Situation der Namensgleichheit zwischen den Feldern und den Parametern. Im Grunde genommen möchte ich auch gar nicht davon abweichen, die Dinge gleich zu benennen, weil sie ja auch das Gleiche bedeuten. Es soll ja möglichst stringent sein, wenn ich etwas bezeichne, also hier als "firstName". Wenn es ein Vorname ist, dann soll er im ganzen System auch so heißen. In C# hat es so eingebürgert, dass wir Mitgliedsvariablen immer mit einem Vorangestellten "this" ansprechen können. Ich kann sagen: "this.firstName". Und damit weiß auch der Compiler auf jeden Fall, dass es sich bei diesem "this.firstName" um diesen "firstName" handelt, also um die Mitgliedsvariable. Dieses Schlüsselwort "this" bezeichnet ein Objekt, und zwar das gegenwärtige Objekt einer Klasse. Wenn ich in diesem Kontext, in diesem Scope, in diesem Sichtbarkeitsbereich dieses Mitarbeiter-Konstruktors, da einfach nur "firstName" ohne irgendetwas davor schreibe, dann könnte es sowohl Mitglied als auch diesen Parameter bedeuten. Und schlimmer wäre es noch, wenn man auch noch hingehen und eine Variable anlegen würde, innerhalb der Methode, dann wäre es schon die dritte Schreibweise. Das ist für den Compiler auch ein bisschen zu viel. Er könnte die beiden überhaupt nicht mehr auseinanderhalten. D.h., das würde er so nicht haben wollen. Aber wenn ich in diesem Kontext, so wie es jetzt ist: Ich habe ein Mitglied "firstName", ich habe einen Parameter "firstName", dann hat der Parameter Vorrang. Und das nutzen wir jetzt an der Stelle in dieser Zuweisung. Wir können sagen: "this.firstName = firstName;" und "this.lastName = lastName;". Dann habe ich die Sache zugewiesen, und damit ist dieses Mitarbeiter-Objekt initialisiert. Jetzt kann ich wunderbar schreiben: "Mitarbeiter m = new Mitarbeiter". Das wäre jetzt nur die halbe Miete. Das wäre es gewesen. Jetzt könnte man so langsam aber sicher daran gehen, dieser Klasse irgendwelche Funktionalität zu verpassen. Packen wir noch eine andere Methode dazu, sagen wir "public void Print()". Dann kann ich mit "Console.WriteLine()".. Da kann ich jetzt mal was verwenden, und zwar die Klasse "String". Strings in C# sind ja eine Klasse "String". Diese Klasse hat eine statische Methode "Format". Mit der kann ich ganz wunderbar irgendwelche Sachen ausgeben. Und zwar übergebe ich diesen "String.Format" jetzt erst einmal so einen ersten Formatierungsstring. Ich schreibe also "(Vorname:", und jetzt will ich den ersten Parameter dieser Methode "String.Format" übergeben, "Nachname:"übergebe ich den zweiten Parameter. Nach diesem String muss ich die Parameter übergeben, in dem Fall ist es "this.firstName" und im zweiten Fall ist es "this.lastName". Jetzt gucken wir, was haben wir gemacht? Wir haben diesen Formatierungsstring. Der hat Verweise auf Parameter. Die fangen bei 0 an, von der Zählung her. Jetzt habe ich 2 Stück mit 0 und 1 bezeichnet. Die stehen jeweils in so geschweiften Klammern drin. Dieses "String.Format" geht durch dieses String durch, und sobald es so einen Parameter findet, wird sozusagen dieser Parameter-String gegen den jeweiligen Parameter ersetzt hier der 1. und hier der 2. Jetzt kann ich diese Print-Methode einsetzen und das letztendlich mit Strg+F5 rekompilieren und starten. Siehe da - wir haben das erwartete Ergebnis auf der Konsole. Das Interessante daran ist, dass wir die ganze Funktionalität ausführen konnten, ohne dass wir Zugriff auf die Felder hatten – genau so soll es sein. In diesem Abschnitt habe ich mich mit den Methoden beschäftigt und wir haben einen kurzen Ausflug in "String.Format" unternommen.

Visual C# 2012 Grundkurs

Schreiben Sie eigene Programme in C# und lernen Sie dazu alle Schlüsselwörter und die meisten Konstrukte kennen, um sicher mit dieser Programmierspreche umzugehen.

7 Std. 1 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!