0Pricing
C# Academy · Lektion

Muster für unveränderliche Objekte

Entwerfen Sie Objekte, die sich nach der Erstellung nicht mehr ändern.

Muster für unveränderliche Objekte ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Unveränderliche Objekte entwerfen

Ein unveränderliches Objekt ändert sich nach seiner Erstellung nie. Unveränderlichkeit beseitigt ganze Fehlerklassen im Zusammenhang mit gemeinsam genutztem veränderlichem Zustand und macht Objekte sicher übertragbar und zwischenspeicherbar.

Nur lesbare Eigenschaften

Die einfachste unveränderliche Eigenschaft ist eine get-only-Eigenschaft, die einmalig in einem Konstruktor zugewiesen wird.

using System;

class Point {
    public int X { get; }
    public int Y { get; }
    public Point(int x, int y) { X = x; Y = y; }
}

var p = new Point(3, 4);
Console.WriteLine(p.X + "," + p.Y); // 3,4

init für die Syntax von Initialisierern

Verwenden Sie init-Eigenschaften, wenn Sie Unveränderlichkeit zusammen mit der praktischen Syntax von Objektinitialisierern benötigen.

using System;

class Color {
    public int R { get; init; }
    public int G { get; init; }
    public int B { get; init; }
}

var c = new Color { R = 255, G = 128, B = 0 };
Console.WriteLine(c.R + "," + c.G + "," + c.B); // 255,128,0

required für verpflichtende Felder

Kombinieren Sie required + init, damit unverzichtbare Felder weder vergessen noch geändert werden können.

using System;

class Money {
    public required decimal Amount { get; init; }
    public required string Currency { get; init; }
}

var m = new Money { Amount = 9.99m, Currency = "USD" };
Console.WriteLine(m.Amount + " " + m.Currency); // 9.99 USD

Neue Objekte zurückgeben statt zu ändern

Unveränderliche Typen stellen „Änderungsoperationen“ als Methoden bereit, die eine neue Instanz zurückgeben, während das ursprüngliche Objekt unverändert bleibt.

using System;

class Point {
    public int X { get; init; }
    public int Y { get; init; }
    public Point Move(int dx, int dy) => new Point { X = X + dx, Y = Y + dy };
}

var a = new Point { X = 1, Y = 1 };
var b = a.Move(2, 3);
Console.WriteLine(a.X + "," + a.Y + " -> " + b.X + "," + b.Y); // 1,1 -> 3,4

Unveränderliche Collections

Speichern Sie bei Collections eine unveränderliche oder schreibgeschützte Collection, damit deren Inhalte nicht über das Objekt geändert werden können.

using System;
using System.Collections.Immutable;

class Team {
    public ImmutableList<string> Members { get; init; } = ImmutableList<string>.Empty;
}

var t = new Team { Members = ["Ada", "Lin"] };
var t2 = new Team { Members = t.Members.Add("Sam") };
Console.WriteLine(t.Members.Count + " " + t2.Members.Count); // 2 3

Defensives Kopieren

Wenn Sie eine veränderliche Collection akzeptieren müssen, kopieren Sie sie beim Übernehmen, damit externe Änderungen nicht durchschlagen können.

using System;
using System.Collections.Generic;
using System.Linq;

class Snapshot {
    private readonly int[] data;
    public Snapshot(IEnumerable<int> source) => data = source.ToArray();
    public IReadOnlyList<int> Data => data;
}

var list = new List<int> { 1, 2, 3 };
var snap = new Snapshot(list);
list.Add(4); // does not affect snap
Console.WriteLine(snap.Data.Count); // 3

Wertbasierte Gleichheit

Unveränderliche Objekte benötigen häufig eine wertbasierte Gleichheit: Zwei Instanzen mit denselben Daten gelten als gleich. Records bieten dies automatisch; bei Klassen müssen Sie es überschreiben.

using System;

record Coord(int X, int Y);

Console.WriteLine(new Coord(1, 2) == new Coord(1, 2)); // True

Thread-Sicherheit ohne zusätzlichen Aufwand

Da sich unveränderliche Objekte nie ändern, können sie ohne Sperren grundsätzlich threadsicher gemeinsam verwendet werden.

using System;

class ReadonlyConfig {
    public required string Env { get; init; }
}

var cfg = new ReadonlyConfig { Env = "prod" };
// safe to read from many threads without synchronization
Console.WriteLine(cfg.Env); // prod

readonly-Felder und Structs

Verwenden Sie readonly-Felder und readonly struct, um die Unveränderlichkeit von Werttypen auf Feldebene durchzusetzen.

using System;

readonly struct Vector {
    public readonly double X, Y;
    public Vector(double x, double y) { X = x; Y = y; }
    public double Length => Math.Sqrt(X * X + Y * Y);
}

Console.WriteLine(new Vector(3, 4).Length); // 5

Alles zusammenführen

Ein vollständig unveränderlicher Typ, der required, init, wertbasierte Gleichheit und eine nicht verändernde Aktualisierungsmethode kombiniert.

using System;

record Account(string Id, decimal Balance) {
    public Account Deposit(decimal amount) => this with { Balance = Balance + amount };
}

var a = new Account("A1", 100m);
var b = a.Deposit(50m);
Console.WriteLine(a.Balance + " -> " + b.Balance); // 100 -> 150

Kurze Überprüfung

Überprüfen Sie das Prinzip der unveränderlichen Aktualisierung.

Zusammenfassung

Sie haben Muster für unveränderliche Objekte kennengelernt.

  • Verwenden Sie nur lesbare oder init-Eigenschaften sowie required für verpflichtende Daten.
  • Modellieren Sie Änderungen als Methoden, die neue Instanzen zurückgeben.
  • Speichern Sie unveränderliche oder defensiv kopierte Collections.
  • Records bieten wertbasierte Gleichheit und Kopien mit with; Unveränderlichkeit sorgt für Threadsicherheit.

Häufig gestellte Fragen

Ist die Lektion „Muster für unveränderliche Objekte“ kostenlos?

Ja — der vollständige Text von „Muster für unveränderliche Objekte“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Muster für unveränderliche Objekte“?

Entwerfen Sie Objekte, die sich nach der Erstellung nicht mehr ändern. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Muster für unveränderliche Objekte“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. init-only-Setter
  2. Der required-Modifizierer
  3. Muster für unveränderliche Objekte
  4. with-Ausdrücke für Records
← Zurück zu C# Academy