Records og moderne C#
Computerspace · FGU · Programmering i C#
✨ Hvad er records og moderne C# features?
Moderne C# (version 9-12) introducerer kraftfulde features der gør koden kortere, sikrere og mere udtryksfuld.
Records (C# 9+) – immutable dataklasser:
```csharp
// Record – kort definition med value equality
public record Person(string Navn, int Alder);
var anna = new Person("Anna", 19);
var anna2 = new Person("Anna", 19);
Console.WriteLine(anna == anna2); // true! (value equality)
Console.WriteLine(anna); // Person { Navn = Anna, Alder = 19 }
// Non-destructive mutation
var ældre = anna with { Alder = 20 };
```
Pattern matching (C# 7-11):
```csharp
object obj = 42;
// Type pattern
if (obj is int tal) Console.WriteLine($"Tal: {tal}");
// Switch expression med patterns
string beskriv(object o) => o switch {
int n when n > 0 => "Positivt tal",
int n when n < 0 => "Negativt tal",
int => "Nul",
string s => $"Tekst: {s}",
null => "Null",
_ => "Ukendt"
};
```
Init-only properties og Required members:
```csharp
public class Konfiguration {
// init: kan sættes i object initializer, men ikke senere
public string ServerUrl { get; init; } = "localhost";
// required: SKAL angives ved oprettelse
public required string ApiNøgle { get; init; }
}
var config = new Konfiguration {
ApiNøgle = "min-nøgle" // Påkrævet!
};
```
Primære konstruktører (C# 12) og top-level statements:
```csharp
// Primær konstruktør – parametre direkte på klassen
public class Service(string url, int timeout) {
public async Task<string> Hent() { / bruger url og timeout / }
}
// Top-level statements – ingen klasse/Main nødvendig
Console.WriteLine("Hej verden!"); // Det er et helt C# program!
```
---
🎓 Læringsmål for Records og moderne C#
Læringsmål
- Bruge records til immutable dataklasser med value equality
- Anvende pattern matching i switch expressions til elegant kontrol
- Forstå init-only properties og required members til sikre initialiseringer
- Kende primære konstruktører og top-level statements fra nyeste C#
Sådan kan du arbejde med emnet
- Hvad er et record i C# og hvornår bruger man det?
- Hvad er pattern matching og hvad er fordelen?
- Hvad er forskellen på set og init?
- Hvad er required members?
⚠️ Typiske fejl at undgå
- Bruger class når record er bedre – til DTO'er og datamodeller er records ideelle
- Forveksler record og struct – records er reference types (som class) som standard
- Glemmer with-udtryk til mutation – records er immutable, brug
withtil at lave kopier
---
💡 Tips til at komme i gang
- Brug records til API-responses – de passer perfekt til JSON-deserialisering
- Eksperimentér med pattern matching – det erstatter mange if/else-kæder elegant
- Prøv .NET 8/9 – de nyeste .NET versioner har mange ydeevne-forbedringer
Øv dette emne med AI — quizzer, forklaringer og feedback tilpasset dit niveau.
Prøv Fagportalen gratis