Generics i C#
Lær, hvordan generics muliggør typesikker og genanvendelig kode
Generics i C# er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 1 af 5. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 5 lektioner i alt.
Introduktion til generiske typer
Generiske typer i C#
Velkommen til den første lektion i "Avancerede C#-funktioner"! I denne lektion lærer du om generiske typer, en effektiv funktion i C#, der giver dig mulighed for at oprette fleksibel og genanvendelig kode. Lad os komme i gang!

Hvad er generiske typer?
Generiske typer er en funktion i C#, der giver dig mulighed for at definere klasser, metoder og datastrukturer med en pladsholder for den datatype, de gemmer eller bruger. Generiske typer sikrer typesikkerhed og genbrug af kode.
Eksempel: En generisk liste (List<T>) kan gemme elementer af enhver type og samtidig sikre typesikkerhed.
Oprettelse af generiske klasser
Du kan definere en generisk klasse ved hjælp af syntaksen <T>, hvor T repræsenterer en typeparameter. Eksempel:
Vigtigt: Brug generiske typer til at oprette klasser, der fungerer med alle datatyper, samtidig med at typesikkerheden bevares.
using System;
class GenericBox<T> {
public T Value { get; set; }
public void Display() {
Console.WriteLine("Value: " + Value);
}
}
class Program {
static void Main() {
GenericBox<int> intBox = new GenericBox<int> { Value = 42 };
intBox.Display(); // Outputs: Value: 42
GenericBox<string> stringBox = new GenericBox<string> { Value = "Hello, Generics!" };
stringBox.Display(); // Outputs: Value: Hello, Generics!
}
}
Oprettelse af generiske metoder
Du kan definere en generisk metode i en klasse. Eksempel:
Tip: Brug generiske metoder til operationer, der gælder for flere datatyper.
using System;
class Program {
static void Main() {
PrintValue(42);
PrintValue("Generics are powerful!");
}
static void PrintValue<T>(T value) {
Console.WriteLine("Value: " + value);
}
}
Begrænsninger for generiske typer
Begrænsninger indskrænker, hvilke typer der kan bruges som typeparametre. Eksempel:
where T : struct- T skal være en værditype.where T : class- T skal være en referencetype.where T : new()- T skal have en parameterløs konstruktør.
Eksempel:
Vigtigt: Begrænsninger gør generiske typer mere fleksible og anvendelige i bestemte situationer.
using System;
class Program {
static void Main() {
DisplayDefault<int>();
DisplayDefault<string>();
}
static void DisplayDefault<T>() where T : new() {
T instance = new T();
Console.WriteLine("Created instance of: " + typeof(T));
}
}
Generiske samlinger
C# indeholder flere indbyggede generiske samlinger:
- List<T>: Gemmer en samling elementer i et dynamisk array.
- Dictionary<TKey, TValue>: Gemmer nøgle-værdi-par, så opslag kan udføres hurtigt.
- Queue<T>: Implementerer en først ind, først ud-struktur (FIFO).
Eksempel: Brug af en generisk liste:
using System;
using System.Collections.Generic;
class Program {
static void Main() {
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
names.Add("Diana");
foreach (string name in names) {
Console.WriteLine(name);
}
}
}
Øvelsesopgave
Opret en generisk klasse Pair<TKey, TValue>, der gemmer et nøgle-værdi-par, samt en generisk metode Swap(), der bytter om på nøglen og værdien. Eksempel:
using System;
class Pair<TKey, TValue> {
public TKey Key { get; set; }
public TValue Value { get; set; }
public void Swap() {
(Key, Value) = ((TKey)(object)Value, (TValue)(object)Key);
}
public void Display() {
Console.WriteLine($"Key: {Key}, Value: {Value}");
}
}
class Program {
static void Main() {
Pair<string, int> pair = new Pair<string, int> { Key = "Age", Value = 30 };
pair.Display();
pair.Swap();
pair.Display();
}
}
Bedste praksis for brug af generiske typer
Her er nogle anbefalinger:
- Brug generiske typer til at oprette genanvendelige og typesikre klasser og metoder.
- Anvend begrænsninger, når der er behov for bestemte typekrav.
- Foretræk generiske samlinger frem for ikke-generiske samlinger af hensyn til ydeevne og sikkerhed.
Tip: Brug meningsfulde navne til typeparametre, f.eks. T for type eller TKey og TValue for nøgle-værdi-par.
Godt klaret!
Tillykke! Du har lært at bruge generiske typer til at skabe genanvendelig og fleksibel kode i C#. I næste lektion udforsker vi asynkron programmering med async og await. Lad os fortsætte med at kode!

Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “Generics i C#” gratis?
Ja — hele teksten til “Generics i C#” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 5 lektioner i alt.
Hvad lærer jeg i “Generics i C#”?
Lær, hvordan generics muliggør typesikker og genanvendelig kode Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 5.
Hvor lang tid tager lektionen “Generics i C#”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Generics i C#
- Async og await: Arbejde med asynkron kode
- Forståelse af tråde og opgaver
- Udforsk delegates og lambdaer
- Forståelse af reflection i C#