Interfaces og generics
Computerspace · FGU · Programmering i C#
🔌 Hvad er interfaces og generics i C#?
Interfaces definerer kontrakter. Generics lader dig skrive type-sikker kode der virker med enhver datatype.
Interface-definition og implementering:
```csharp
// Interface – definerer HVAD, ikke HVORDAN
public interface ILærbar {
string Navn { get; }
void Lær();
bool ErFærdig { get; }
}
// Klasse implementerer interface
public class OnlineKursus : ILærbar {
public string Navn { get; }
private int fremskridt = 0;
public OnlineKursus(string navn) => Navn = navn;
public void Lær() => fremskridt += 10;
public bool ErFærdig => fremskridt >= 100;
}
// En klasse kan implementere FLERE interfaces
public class Elev : ILærbar, IComparable<Elev> {
public string Navn { get; }
public void Lær() { / ... / }
public bool ErFærdig => false;
public int CompareTo(Elev? other) => Navn.CompareTo(other?.Navn);
}
```
Generics – type-sikre container og metoder:
```csharp
// Generisk metode
T Maksimum<T>(T a, T b) where T : IComparable<T> {
return a.CompareTo(b) > 0 ? a : b;
}
int maxInt = Maksimum(3, 7); // 7
string maxStr = Maksimum("Anna", "Bo"); // "Bo"
// Generisk klasse
public class Lager<T> {
private List<T> varer = new();
public void Tilføj(T vare) => varer.Add(vare);
public T Hent(int index) => varer[index];
}
```
LINQ – Language Integrated Query:
```csharp
var elever = new List<Elev> { / ... / };
// LINQ metode-syntax
var myndigeElever = elever
.Where(e => e.Alder >= 18)
.OrderBy(e => e.Navn)
.Select(e => e.Navn)
.ToList();
// LINQ query-syntax
var navne = from e in elever
where e.Alder >= 18
orderby e.Navn
select e.Navn;
```
---
🎓 Læringsmål for Interfaces og generics
Læringsmål
- Definere og implementere interfaces som kontrakter
- Forstå forskellen på abstrakte klasser og interfaces
- Skrive generiske metoder og klasser med type-constraints
- Bruge de vigtigste generiske collections: List<T>, Dictionary<TKey, TValue>
- Udføre forespørgsler med LINQ til at filtrere og transformere data
Sådan kan du arbejde med emnet
- Hvad er et interface og hvorfor bruger man det?
- Hvad er forskellen på abstrakt klasse og interface?
- Hvad er generics og hvad er fordelen?
- Hvad er LINQ og hvad bruges det til?
⚠️ Typiske fejl at undgå
- Arver interface-implementering – en klasse skal eksplicit implementere alle interface-metoder
- Glemmer where-constraint – generisk kode kan fejle ved runtime uden korrekte constraints
- Glemmer .ToList() efter LINQ – LINQ queries er "lazy" og kører ikke før de itereres
---
💡 Tips til at komme i gang
- Brug LINQ overalt – det er en af C#'s stærkeste features og sparer meget kode
- Design med interfaces – det gør koden testbar og fleksibel
- Prøv Dependency Injection – interfaces er kernen i DI, som bruges i ASP.NET Core
Øv dette emne med AI — quizzer, forklaringer og feedback tilpasset dit niveau.
Prøv Fagportalen gratis