1. Einführung
Wie du vielleicht schon gehört hast, ist eine Klasse eine Vorlage und ein Objekt ist deren Instanz.
Aber jetzt ist es Zeit, Klassen und Objekte etwas tiefer zu verstehen!
Stell dir vor, du bist Ingenieur in einer Autofabrik. Anstatt jedes Auto von Hand zusammenzubauen, erstellst du eine Zeichnung – eine universelle Anleitung, nach der viele Autos eines Typs gebaut werden können. In dieser Zeichnung steht, dass das Auto einen Motor, Räder, eine Karosserie, eine Farbe haben soll und welche Funktionen es erfüllt.
Diese Zeichnung nennt man in der Programmierung Klasse.
Und jetzt stell dir vor, dass nach dieser Zeichnung die Fabrik eine Serie von Autos produziert hat. Jedes davon ist real, fährt auf der Straße, hat eine eigene Nummer, Farbe und vielleicht sogar individuelle Einstellungen. Aber alle wurden nach derselben Zeichnung gebaut.
Diese echten Autos nennt man in der Programmierung Objekte (oder Instanzen der Klasse).
Also, merken wir uns:
- Klasse – das ist wie eine Zeichnung, Vorlage, ein Schema. Sie beschreibt, welche Daten etwas haben kann (zum Beispiel Marke, Farbe, Anzahl der Türen) und was dieses Etwas tun kann (zum Beispiel fahren, bremsen, hupen). Die Klasse ist nur eine Beschreibung, sie nimmt selbst kaum Speicherplatz ein und ist nichts „Lebendiges“.
- Objekt – das ist ein konkretes „Auto“, das nach der Zeichnung der Klasse gebaut wurde. Das ist eine echte, „lebendige“ Entität in deinem Programm, die Speicherplatz belegt, ihre eigenen Werte für die Daten hat (ihre Nummer, Farbe) und die Aktionen ausführen kann, die in der Klasse beschrieben sind.
Klingt ein bisschen abstrakt? Keine Sorge, wir schauen uns das gleich genauer an.
2. Was ist eine Klasse?
Klasse – das ist ein benutzerdefinierter Datentyp, der beschreibt, wie Objekte dieses Typs aussehen sollen: welche Eigenschaften (Zustände/Properties/Felder) sie haben und welche Aktionen man mit ihnen machen kann (Verhalten/Methoden/Funktionen).
Eine Klasse definiert:
- Felder (Variablen) – Daten, die im Objekt gespeichert werden.
- Methoden (Funktionen) – Aktionen, die das Objekt ausführen kann.
- Eigenschaften – spezielle Methoden für den Zugriff auf Daten.
- Ereignisse – Mechanismen für Benachrichtigungen (dazu später mehr).
- Konstruktoren – spezielle Methoden zum Erstellen von Objekten.
public class Person
{
// Felder (Daten)
public string Name;
public int Age;
// Methode (Aktion)
public void SayHello()
{
Console.WriteLine($"Hallo! Ich heiße {Name}, ich bin {Age} Jahre alt.");
}
}
In diesem Beispiel haben wir die Klasse Person deklariert. Sie hat zwei Felder (Name und Age) und die Methode SayHello(). Das ist alles, was man für eine ganz einfache Klasse braucht.
3. Was ist ein Objekt?
Objekt – das ist eine Instanz der Klasse, also eine konkrete Entität, die im Speicher nach der „Zeichnung“ (Klasse) erstellt wurde.
Wenn du eine Variable vom Typ Person erstellst, bekommst du ein Objekt – mit eigenen Werten für jedes Feld. Nicht einfach einen Menschen, sondern zum Beispiel einen Menschen namens Johnny, der 12 Jahre alt ist. Und wenn er uns begrüßt (also die Methode SayHello() aufgerufen wird), „sagt“ er uns Informationen über sich.
// Objekt der Klasse Person erstellen
Person person1 = new Person();
person1.Name = "Alisa";
person1.Age = 28;
person1.SayHello(); // => Hallo! Ich heiße Alisa, ich bin 28 Jahre alt.
// Noch einen "Menschen" erstellen
Person person2 = new Person();
person2.Name = "Bob";
person2.Age = 32;
person2.SayHello(); // => Hallo! Ich heiße Bob, ich bin 32 Jahre alt.
Jedes Objekt ist nicht einfach eine Kopie: Es ist eine unabhängige Entität mit eigenen Daten (in unserem Beispiel – Namen und Alter).
4. Wichtigster Unterschied zwischen Klasse und Objekt
Der wichtigste Unterschied:
- Klasse – „Zeichnung“, Anleitung, Datentyp.
- Objekt – konkreter Vertreter dieses Typs; echtes „Haus“, gebaut nach dem Plan; „Auto“, produziert nach der Zeichnung.
Du kannst so viele Objekte einer Klasse erstellen, wie du willst. Wenn du zum Beispiel die Klasse Person hast, kannst du eine Million „Menschen“ im Programm erstellen.
Warum ist das praktisch und wichtig?
Stell dir ein Programm ohne Klassen vor. Wenn wir eine Liste von Studenten hätten, müssten wir Name, Alter, Noten und andere Daten in separaten Arrays für jeden Parameter speichern:
string[] studentNames = { "Sergej", "Grischa", "Mascha" };
int[] studentAges = { 20, 19, 21 };
// Wenn du noch eine Eigenschaft hinzufügen willst, gibt es noch ein Array.
// Zwei Leute zu vertauschen wird zum echten Albtraum!
Mit Klassen laufen die Daten nicht in verschiedene Arrays auseinander, sondern werden logisch gruppiert:
public class Student
{
public string Name;
public int Age;
}
Student[] students = new Student[3];
students[0] = new Student { Name = "Sergej", Age = 20 };
students[1] = new Student { Name = "Grischa", Age = 19 };
students[2] = new Student { Name = "Mascha", Age = 21 };
Viel verständlicher und bequemer! Außerdem kann man jedem Studenten jetzt Methoden hinzufügen (zum Beispiel „begrüßen“ oder „Durchschnittsnote berechnen“).
Bild: Zusammenhang zwischen Klasse und Objekt
+------------------+ +----------------+
| class Person |=========>| person1: |
| (zeichnung/typ) | | Name = "Alisa"|
| | /| Age = 28 |
+------------------+ / +----------------+
/
+------------------------/----------------------+
/
+----------------+
| person2: |
| Name = "Bob" |
| Age = 32 |
+----------------+
5. Wo werden Klassen und Objekte im echten Leben verwendet?
Klassen und Objekte sind die Grundlage für jede Anwendung in C#. Alles, was du in .NET siehst: Fenster, Buttons, Forms, Arrays, Collections, Datenbankverbindungen, Logs – das sind Objekte, die nach bestimmten Klassen erstellt wurden.
Beispiele:
- Die Klasse Button – das ist die Anleitung, wie ein Button auf dem Bildschirm aussehen soll. Jedes Mal, wenn du einen neuen Button erstellst – das ist ein Objekt der Klasse.
- Die Klasse Stream (aus dem IO-System): Du bekommst ein Objekt, das mit Dateien arbeitet.
- Deine zukünftige Klasse User zum Speichern von User-Informationen – wieder dieselbe Vorlage.
Kurz zu Namen, Modifikatoren und Konventionen
- Für Klassen nimmt man normalerweise Namen mit großem Anfangsbuchstaben, zum Beispiel Person, Order, Product.
- Für Variablen – mit kleinem Anfangsbuchstaben, zum Beispiel person, user1, orderList.
- Meistens macht man die Klasse public – damit sie überall im Projekt verfügbar ist.
GO TO FULL VERSION