1. Objektfelder: Hier speichert das Objekt seine Daten
In C# (und eigentlich in den meisten Programmiersprachen) sagt man oft: „Alles ist ein Objekt“. Ein Objekt ist ein „virtuelles Ding“ im Speicher des Computers, das etwas speichern kann (Daten) und etwas tun kann (Methoden). Anders gesagt: Ein Objekt hat einen Zustand (Felder, Daten) und ein Verhalten (Methoden).
Beispiele für Objekte:
- Katze im Spiel (Cat)
- Benutzer einer Website (User)
- Buch in der Bibliothek (Book)
- Auto auf dem Parkplatz (Car)
Wenn du ein Objekt erstellst, machst du quasi eine Kopie einer Vorlage (Klasse), und diese Kopie kann mit ihren eigenen Daten arbeiten.
Felder sind Variablen, die „im Inneren“ des Objekts liegen und seine individuellen Daten speichern.
Beispiel aus dem echten Leben
Jede Katze hat einen Namen, ein Alter und eine Farbe. Diese Daten sind individuell – jede Katze hat ihre eigenen.
public class Cat
{
public string Name; // Name der Katze – Feld des Objekts
public int Age; // Alter der Katze – Feld des Objekts
public string Color; // Farbe der Katze – Feld des Objekts
}
Wenn wir Objekte erstellen:
Cat cat1 = new Cat();
cat1.Name = "Whiskers";
cat1.Age = 2;
cat1.Color = "grau";
Cat cat2 = new Cat();
cat2.Name = "Luna";
cat2.Age = 5;
cat2.Color = "schwarz";
Jedes Objekt hat seine eigenen Feldwerte!
| Objekt | Name | Age | Color |
|---|---|---|---|
| cat1 | Whiskers | 2 | grau |
| cat2 | Luna | 5 | schwarz |
Feld – das ist eine Art „Tasche“ im Objekt, in die es etwas hineinlegen kann.
2. Objektmethoden: Was das Objekt tun kann
Methode – das ist eine „Aktion“, „Fähigkeit“ oder „Funktion“ des Objekts. Eine Methode ist ein Stück Code, das man beim Objekt „aufrufen“ kann.
Beispiel aus dem echten Leben
Eine Katze kann Dinge tun: Sie kann miauen, laufen, essen.
public class Cat
{
public string Name;
public void Meow()
{
Console.WriteLine($"{Name} sagt: Miau!");
}
public void Sleep()
{
Console.WriteLine($"{Name} schläft.");
}
}
Verwendung:
Cat cat1 = new Cat();
cat1.Name = "Whiskers";
cat1.Meow(); // Whiskers sagt: Miau!
cat1.Sleep(); // Whiskers schläft.
Jedes Objekt hat seine eigenen Methoden, und sie verwenden seine eigenen Felder!
3. Statische Felder (static fields): Gemeinsame Daten
Manchmal möchte man in einem Feld nicht individuelle Objektdaten speichern, sondern allgemeine Informationen für die ganze Klasse. Zum Beispiel mitzählen, wie viele Katzen insgesamt erstellt wurden, oder eine gemeinsame „maximale Lautstärke“ für alle Katzen festlegen.
Dafür gibt es in C# statische Felder – sie werden mit dem Wort static deklariert.
public class Cat
{
public string Name;
public static int Count = 0; // Statisches Feld
public Cat(string name)
{
Name = name;
Count++; // Erhöht den gemeinsamen Katzenzähler
}
}
//Arbeiten mit der Klasse Cat
Cat c1 = new Cat("Whiskers");
Cat c2 = new Cat("Luna");
Console.WriteLine(Cat.Count); // 2 – gemeinsam für alle Objekte
Ein statisches Feld gibt es nur einmal pro Klasse, es wird von allen Objekten „geteilt“.
Man greift darauf üblicherweise über den Klassennamen zu: Cat.Count.
4. Statische Methoden (static methods)
Statische Methode – das ist eine Methode, die nicht an ein bestimmtes Objekt gebunden ist, sondern der ganzen Klasse gehört.
- So eine Methode kann man aufrufen, ohne ein Objekt zu erstellen.
- Innerhalb einer statischen Methode kann man nicht auf normale (nicht-statische) Felder und Methoden zugreifen – weil es kein konkretes Objekt gibt!
public class MathUtils
{
public static int Add(int a, int b)
{
return a + b;
}
}
Verwendung:
int sum = MathUtils.Add(2, 3); // 5
Statische Methoden werden oft für Utilities verwendet – Funktionen, die nicht vom Zustand eines Objekts abhängen.
Du kennst schon viele statische Methoden:
Console.WriteLine();
Console.ReadLine();
Math.Round();
Math.Truncate();
5. Methoden und Felder vergleichen
| Was ist das? | Wie deklarieren? | Wo gespeichert? | Wofür? | Wie darauf zugreifen? |
|---|---|---|---|---|
| Objektfeld | |
In jedem Objekt | Persönliche Daten des Objekts | cat1.Name, cat2.Name |
| Objektmethode | |
In jedem Objekt | Aktionen, die Felder des Objekts verwenden | cat1.Meow() |
| Statisches Feld | |
Einmal pro Klasse | Gemeinsame Daten für alle Objekte | Cat.C |
| Statische Methode | |
Einmal pro Klasse | Gemeinsame „Fähigkeiten“, die nicht vom Objekt abhängen | Cat.Method() |
7. Illustration
Normale Felder und Methoden:
. +-----------------+
cat1: | Name = "Whiskers" |
| Age = 2 |
+-----------------+
+------------------+
cat2: | Name = "Luna" |
| Age = 5 |
+------------------+
Statisches Feld Count:
Cat.Count = 2 // einmal gemeinsam für alle Katzen
Methodenaufruf:
cat1.Meow(); // Whiskers sagt: Miau!
cat2.Meow(); // Luna sagt: Miau!
Statische Methode aufrufen:
MathUtils.Add(2, 3); // 5
Fazit
- Felder – sind für die individuellen Eigenschaften jedes Objekts (Properties) zuständig.
- Methoden – beschreiben, was ein Objekt tun kann.
- Statische Felder – eignen sich zum Speichern von „gemeinsamen“ Daten (z.B. Zähler, globale Einstellungen).
- Statische Methoden – werden für Operationen verwendet, die nicht von einem bestimmten Objekt abhängen (z.B. mathematische Funktionen).
8. Häufige Fragen
Kann man auf ein statisches Feld über ein Objekt zugreifen?
Technisch – ja (cat1.Count), aber üblich ist der Zugriff über die Klasse (Cat.Count), damit man sich und andere nicht verwirrt.
Kann man eine nicht-statische Methode ohne Objektaufruf verwenden?
Nein, weil so eine Methode immer mit einem bestimmten Objekt und dessen Daten arbeitet.
Kann man in einer statischen Methode normale Felder und Methoden verwenden?
Nein – weil die statische Methode nicht weiß, auf welches Objekt sie zugreifen soll.
Kann man eine „vollständig statische“ Klasse machen?
Ja, dafür schreibt man static class – sie kann nicht mit new erstellt werden, und alle Member dieser Klasse müssen statisch sein.
GO TO FULL VERSION