Im heutigen Beitrag dreht sich alles rund um das Thema C# Klassen. Klassen und Objekte sind die zwei wichtigsten Grundlagen, wenn es um das Thema objektorientierte Programmierung in C# geht. Ich werde dir heute also zeigen, wie man in C# Klassen definiert und wie man davon anschließend Objekte erstellen kann.
Inhaltsverzeichnis
1. Was sind Klassen?
Wie bereits im vorherigen Beitrag beschrieben: Klassen sind Baupläne für Objekte.
In einer Klasse definieren wir alle Eigenschaften, Methoden und anderen Member, die ein Objekt der Klasse haben soll. Member sind all die Dinge, die in einer Klasse definiert werden, die ein Objekt dann später besitzt. Dazu zählen Eigenschaften, Methoden und andere Dinge, die du noch kennenlernen wirst.
Sobald eine Klasse definiert ist, kann man davon Objekte erzeugen. Und zwar beliebig viele. An dieser Stelle möchte ich dir ein einfaches Beispiel für eine Klasse zeigen, damit du siehst, wie man diese definieren kann:
Wir sehen auf der Abbildung eine Klasse, die Person heißt. Man erstellt eine Klasse, indem man zunächst das Schlüsselwort class schreibt. Anschließend folgt der Bezeichner, also der Name. Im Beispiel habe ich diese Klasse „Person“ genannt, weil sie eine Person modellieren soll.
Den ersten Buchstaben vom Namen Person habe ich großgeschrieben. Das liegt daran, dass man aufgrund einer Namenskonvention die Namen von C# Klassen großschreibt. Daran sollte man sich am besten immer halten.
Nachdem man dieser Klasse einen Namen gegeben hat, kommt auch schon der Klasseninhalt. Dieser wird in einem geschweiften Klammerpaar verpackt. Alles, was also zwischen diesen geschweiften Klammern steht, ist Teil der Klasse Person. In dieser Klasse sind jetzt drei Eigenschaften definiert.
Was eine Eigenschaft genau ist, hast du hier bisher noch nicht gelernt. Vorerst kannst du sie dir einfach mal wie eine ganz normale Variable vorstellen. Das ist zwar so nicht richtig, aber man verwendet Eigenschaften fast genau wie normale Variablen auch. Was Eigenschaften tatsächlich sind, wirst du später noch lernen.
Wir haben in unserem Beispiel also den String Vorname, den String Nachname und einen Integer Alter. Damit sorgen wir dafür, dass jedes Personenobjekt einen Vornamen, einen Nachnamen und ein Alter besitzt.
Direkt darunter ist eine Methode definiert. Diese unterscheidet sich nur kaum von den Methoden, die wir bisher definiert haben. In unserem Beispiel haben wir allerdings keine statische Methode mehr. Somit wählen wir statt dem Schlüsselwort static nun das Schlüsselwort public.
Mit public sorgen wir dafür, dass man auch außerhalb des Codeblocks auf die Methode SageEtwas zugreifen kann.
Die Methode SageEtwas gibt nichts zurück. Sie nimmt einen String namens satz an und gibt in der Konsole Vorname, Nachname und den Satz aus. Die Ausgabe sieht also ähnlich aus wie die Chatnachricht einer Person.
Wie das Ganze in der Praxis aussieht und wie man so eine Methode aufrufen kann, werde ich dir gleich zeigen. Vorher sehen wir uns allerdings noch an, wie man von C# Klassen Objekte erzeugen kann.
2. Objekte erstellen
Von einer definierten Klasse kann man, wie bereits erwähnt, Objekte erstellen. Dazu verwendet man das „new“-Schlüsselwort. Wie das aussieht, siehst du auf der folgenden Abbildung:
Im Beispiel befinden wir uns in der Main Methode. Darin haben wir bisher immer unseren Code geschrieben. Innerhalb der Main Methode habe ich eine Variable namens „peter“ vom Datentyp Person erstellt. Person ist die Klasse, die wir auf der vorherigen Abbildung erstellt bzw. gesehen haben. Jetzt weise ich also der Variable peter vom Typ Person ein neues Objekt von diesem Typ Person zu. Das gelingt mithilfe des Zuweisungsoperators und des new-Schlüsselwortes. Anschließend folgt der Datentyp, von dem ich ein Objekt erzeugen möchte: Die Klasse Person, gefolgt von einem Klammerpaar.
Damit haben wir auch schon eine neue Person erstellt, also ein neues Personenobjekt erzeugt und dieses in die Variable peter geschrieben.
Wie du auf Abbildung 2 erkennen kannst, können wir mithilfe des Punktes (.) auf die einzelnen Eigenschaften bzw. generell auf die Member, die public sind, von dieser Klasse Person zugreifen. Wie bei einer normalen Variable also. Außerdem können wir mit der Zeile peter.SageEtwas und damit auf dem Objekt, das sich in der Variable peter befindet, die SageEtwas-Methode aufrufen. Darin übergeben wir den Text „Hey Leute“.
3. C# Klassen in der Praxis
Wie das nun in der Praxis aussieht und welche Auswirkungen das Ganze hat, möchte ich dir an dieser Stelle in Visual Studio zeigen.
Wir möchten nun also eine Klasse erstellen. Die erste Frage, die dabei aufkommt, ist wahrscheinlich: Wo erstellen wir unsere Klassen?
Klassen definiert man immer innerhalb eines Namespaces. Wenn wir in unserem Programm nach oben sehen, haben wir den Namespace OOPYouTube. Dieser wurde schon vorgeneriert - so heißt nämlich mein Projekt. Der Namespace wird mit einem geschweiften Klammerpaar gebildet:
In diesem Namespace befindet sich auch die Klasse Program, die das Programm ebenfalls vorgeneriert. Wir bewegen den Cursor jetzt einfach mal unter die Klasse Program und definieren dort unsere eigene Klasse. Und zwar die Klasse Person.
Dazu schreiben wir zuerst das Schlüsselwort class und den Bezeichner, also den Namen der Klasse. Wir nennen diese Person. Anschließend setzen wir ein geschweiftes Klammerpaar und alles, was zwischen diesem geschweiften Klammerpaar steht, ist Inhalt der Klasse Person:
Zuerst werden wir drei Eigenschaften definieren. Eigenschaften, auf die man auch von außerhalb des Objekts zugreifen kann, definiert man als public. Das heißt, wir schreiben das Schlüsselwort public und legen dann fest, von welchem Datentyp die Eigenschaft ist.
Zuerst schreiben wir einen String und nennen diesen „Vorname“. Nun folgt ein geschweiftes Klammerpaar, in das wir „get;“ und „set;“ schreiben.
Was das genau bedeutet, wirst du noch im Beitrag über Eigenschaften lernen.
Um es aber an dieser Stelle kurz und einfach zu erklären: Über einen Getter greift man auf den Wert dieser Eigenschaft zu, also liest diesen und über den Setter überschreibt man den Wert. Sprich: get bedeutet zurückgeben lassen und set bedeutet setzen.
Im Anschluss legen wir noch eine weitere Eigenschaft fest, die wieder public und vom Typ String ist. Diese nennen wir „Nachname“:
Zu guter Letzt folgt noch ein public Integer mit dem Namen „Alter“:
Damit haben wir drei Eigenschaften in der Klasse Person definiert.
Nun möchten wir darin noch eine Methode definieren, die wir „SageEtwas“ nennen.
Als Parameter nimmt diese einen String namens satz an. In dieser Methode schreiben wir ganz einfach Console.WriteLine, gefolgt von Vorname, Nachname und dem Satz, den wir sagen möchten.
Und damit haben wir auch schon die Klasse Person fertig definiert! Von dieser Klasse Person können wir nun Objekte erzeugen. Wie du bereits gelernt hast, ist eine Klasse im Grunde ein Bauplan für Objekte. Damit haben wir also einen Bauplan für Personenobjekte definiert.
Jetzt können wir zurück in unsere Main-Methode gehen und Personenobjekte erzeugen.
Diese Personenobjekte muss man selbstverständlich irgendwo hin speichern, weshalb wir uns zunächst eine Variable vom Typ Person erstellen. Diese nennen wir einfach mal person1 und speichern darin ein neues Personenobjekt, indem wir new, gefolgt vom Datentyp Person und einem Klammerpaar schreiben.
Damit haben wir ein neues Personenobjekt erzeugt und es in die Variable person1 geschrieben. Dementsprechend können wir jetzt von diesem Personenobjekt aus person1 beispielsweise einen Vornamen festlegen, indem wir schreiben: person1.Vorname = „Sabrina“. person1.Nachname setzen wir auf Müller. Nun können wir auch auf dieser person1 die Methode SageEtwas aufrufen.
Das heißt ich schreibe person1.SageEtwas. Und weil diese Methode einen String namens satz entgegennehmen möchte, übergeben wir jetzt einfach mal den String „Hallo Leute!“.
Wenn wir jetzt das Programm starten, sehen wir die folgende Ausgabe:
Das Interessante ist jetzt, dass wir nicht nur ein Objekt erzeugen können, sondern mehrere.
Wir können also noch eine weitere Person-Variable erstellen, die wir person2 nennen. Dieser weisen wir den Vornamen „Peter“ und den Nachnamen „Maier“ zu. Der Methode SageEtwas übergeben wir den String „Hallo Sabrina“:
Wenn wir das Programm jetzt starten, sehen wir folgendes:
Das funktioniert also einwandfrei. In diesem Sinne hast du heute gesehen, wie man C# Klassen definiert und wie man im Anschluss von diesen Klassen Objekte erzeugt.
Wie wir gesehen haben, ist das Ganze gar nicht mal so schwierig. In den kommenden Beiträgen wirst du noch lernen, was das ganze Thema mit den Eigenschaften auf sich hat und außerdem wirst du noch weitere spannende Dinge zum Thema Objektorientierung in C# kennenlernen.