0Pricing
C# Academy · Lektion

Structs: Wertsemantik und Muster für Unveränderlichkeit

Verstehen Sie die Wertsemantik von Structs in C# 6 und erstellen Sie ein Muster für unveränderliche Structs (Änderungen durch Kopieren).

Structs: Wertsemantik und Muster für Unveränderlichkeit ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 3. 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 3 Lektionen.

Überblick über Structs

Ziel: Verwenden Sie Structs sicher.

  • Wertsemantik (Kopie bei Zuweisung)
  • Muster für unveränderliche Structs in C# 6
  • Übergabe als Wert oder als Referenz
  • Hinweis zum Boxing

Kopiersemantik

Structs sind Werttypen: Bei einer Zuweisung wird eine Kopie erstellt. Änderungen an der Kopie verändern das Original nicht.

using System;

// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
  public int X;
  public int Y;
}

public class Program
{
  public static void Main(string[] args)
  {
    Point a = new Point();
    a.X = 1; a.Y = 2;

    Point b = a;     // copy the value
    b.X = 9;         // change the copy

    Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
    Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
  }
}

Muster für unveränderliche Structs

Bevorzugen Sie unveränderliche Structs: schreibgeschützte Felder, einen Konstruktor für den erforderlichen Zustand und kleine With-Hilfsmethoden für neue Werte.

using System;

// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
  private readonly decimal _amount;
  private readonly string _currency;

  public decimal Amount { get { return _amount; } }
  public string Currency { get { return _currency; } }

  public Money(decimal amount, string currency)
  {
    _amount = amount;
    _currency = currency ?? "USD";
  }

  // Copy-on-change: returns a new value with updated amount
  public Money WithAmount(decimal amount)
  {
    return new Money(amount, _currency);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Money m1 = new Money(10m, "USD");
    Money m2 = m1.WithAmount(15m); // new value

    Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
    Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
  }
}

Als Wert oder als Referenz

Methoden erhalten standardmäßig eine Kopie. Verwenden Sie ref, um das Struct des Aufrufers zu ändern.

using System;

public struct Counter
{
  public int Value;
}

public class Program
{
  static void IncrementByValue(Counter c)
  {
    c.Value = c.Value + 1; // changes only the local copy
  }

  static void IncrementByRef(ref Counter c)
  {
    c.Value = c.Value + 1; // changes the caller's variable
  }

  public static void Main(string[] args)
  {
    Counter a = new Counter();
    IncrementByValue(a);
    Console.WriteLine("After by-value: " + a.Value); // 0

    IncrementByRef(ref a);
    Console.WriteLine("After by-ref: " + a.Value);   // 1
  }
}

Grundlagen des Boxing

Beim Boxing wird ein Struct in eine Objekt- oder Schnittstellenreferenz kopiert. Beim Unboxing wird eine weitere Kopie erstellt.

using System;

public interface IShow { string Show(); }

public struct Temperature : IShow
{
  public int C;
  public string Show() { return C + "C"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Temperature t = new Temperature();
    t.C = 25;

    object boxed = t;              // boxing: copy into object
    Temperature copy = (Temperature)boxed; // unbox (another copy)
    copy.C = 30;

    Console.WriteLine("t = " + t.C);     // 25
    Console.WriteLine("copy = " + copy.C); // 30
  }
}

Tipps zu Structs

Tipps:

  • Verwenden Sie Structs für kleine, unveränderliche Wertobjekte (Koordinaten, Geldbeträge).
  • Vermeiden Sie große oder stark veränderliche Structs.
  • Denken Sie an Kopien bei Zuweisungen und bei der Übergabe als Wert.
  • Beachten Sie Boxing, wenn Sie in object oder eine Schnittstelle umwandeln.

Wertsemantik von Structs

Kurze Verständnisfrage: Was beschreibt die Wertsemantik eines Structs in C# am besten?

Zusammenfassung

Zusammenfassung: Structs sind Werttypen. Bevorzugen Sie kleine, unveränderliche Designs (Konstruktor + readonly-Felder + With). Beachten Sie, wie die Übergabe als Wert oder mit ref und das Boxing sich auf Kopien auswirken.

Häufig gestellte Fragen

Ist die Lektion „Structs: Wertsemantik und Muster für Unveränderlichkeit“ kostenlos?

Ja — der vollständige Text von „Structs: Wertsemantik und Muster für Unveränderlichkeit“ 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 3 Lektionen.

Was lerne ich in „Structs: Wertsemantik und Muster für Unveränderlichkeit“?

Verstehen Sie die Wertsemantik von Structs in C# 6 und erstellen Sie ein Muster für unveränderliche Structs (Änderungen durch Kopieren). 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 1 von 3.

Wie lange dauert die Lektion „Structs: Wertsemantik und Muster für Unveränderlichkeit“?

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. Structs: Wertsemantik und Muster für Unveränderlichkeit
  2. Record-ähnliche Typen und wertbasierte Gleichheit (Muster)
  3. Enums und [Flags]
← Zurück zu C# Academy