CodeGym /Kurse /C# SELF /Statische Felder und Methoden

Statische Felder und Methoden

C# SELF
Level 12, Lektion 1
Verfügbar

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
}
Beispiel für die Deklaration von Objektfeldern

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.");
    }
}
Beispiel für Objektmethoden

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
Beispiel für die Verwendung eines statischen Feldes

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;
    }
}
Beispiel für eine statische Methode

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
public string Name;
In jedem Objekt Persönliche Daten des Objekts cat1.Name, cat2.Name
Objektmethode
public void Meow(){}
In jedem Objekt Aktionen, die Felder des Objekts verwenden cat1.Meow()
Statisches Feld
public static int C;
Einmal pro Klasse Gemeinsame Daten für alle Objekte Cat.C
Statische Methode
public static ...
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.

2
Aufgabe
C# SELF, Level 12, Lektion 1
Gesperrt
Statisches Feld zur Zählung von Objekten
Statisches Feld zur Zählung von Objekten
2
Aufgabe
C# SELF, Level 12, Lektion 1
Gesperrt
Statische Methode zur Überprüfung einer Zahl
Statische Methode zur Überprüfung einer Zahl
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION