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).
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
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.
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
- Structs: waardesemantiek en patroon voor onveranderlijkheid
- Recordachtige typen en waardegelijkheid (patroon)
- Enums en [Flags]