C# Academy · Les

Structs: waardesemantiek en patroon voor onveranderlijkheid

Begrijp de waardesemantiek van structs in C# 6 en bouw een patroon voor een onveranderlijke struct (kopiëren bij wijziging).

Les 1 van 38 stappen

Structs: waardesemantiek en patroon voor onveranderlijkheid is een gratis C# Academy-les op CoddyKit. Dit is les 1 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject C# Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus C# Academy bevat in totaal 3 lessen.

Overzicht van structs

Doel: Gebruik structs veilig.

  • Waardesemantiek (kopiëren bij toewijzing)
  • Patroon voor onveranderlijke structs in C# 6
  • Doorg even op waarde versus met ref
  • Opmerking over boxing

Kopieerse mantiek

Structs zijn waardetypen: bij toewijzing wordt een kopie gemaakt. Als je de kopie wijzigt, verandert het origineel niet.

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
  }
}

Patroon voor onveranderlijke structs

Geef de voorkeur aan onveranderlijke structs: readonly-velden, een constructor voor vereiste toestand en kleine With-hulpmethoden voor nieuwe waarden.

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);
  }
}

Op waarde versus met ref

Methoden ontvangen standaard een kopie. Gebruik ref om de struct van de aanroeper te wijzigen.

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
  }
}

Basisprincipes van boxing

Boxing kopieert een struct naar een object- of interfacereferentie. Bij unboxing ontstaat nog een kopie.

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
  }
}

Tips voor structs

Tips:

  • Gebruik structs voor kleine, onveranderlijke waardeobjecten, zoals coördinaten en geld.
  • Vermijd grote of sterk veranderlijke structs.
  • Denk aan kopieën bij toewijzing en bij doorgeven op waarde.
  • Let op boxing wanneer je cast naar object of interface.

Waardesemantiek van structs

Snelle controle: Wat beschrijft de waardesemantiek van een struct in C# het best?

Samenvatting

Samenvatting: Structs zijn waardetypen. Geef de voorkeur aan kleine, onveranderlijke ontwerpen (constructor + readonly-velden + With). Begrijp hoe doorgeven op waarde versus met ref en boxing van invloed is op kopieën.

Gratis beginnen

Leer C# met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
93
Lessen
346

Veelgestelde vragen

Is de les “Structs: waardesemantiek en patroon voor onveranderlijkheid” gratis?

Ja — de volledige tekst van “Structs: waardesemantiek en patroon voor onveranderlijkheid” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus C# Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus C# Academy bevat in totaal 3 lessen.

Wat leer ik in “Structs: waardesemantiek en patroon voor onveranderlijkheid”?

Begrijp de waardesemantiek van structs in C# 6 en bouw een patroon voor een onveranderlijke struct (kopiëren bij wijziging). Je oefent met C# Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met C# Academy te beginnen?

Ervaring vooraf is niet nodig. C# Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 3.

Hoe lang duurt de les “Structs: waardesemantiek en patroon voor onveranderlijkheid”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over C# Academy?

Ja. Elke les over C# Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Structs: waardesemantiek en patroon voor onveranderlijkheid
  2. Recordachtige typen en waardegelijkheid (patroon)
  3. Enums en [Flags]
← Terug naar C# Academy