Gå til indholdet

Dynamiske typer

Dynamiske typer i C# er en fleksibel feature, der gør det muligt at omgå nogle af de strenge typekontroller, der normalt findes i et stærkt typet sprog som C#. Denne funktionalitet blev introduceret i C# 4.0 med dynamic keywordet. Dynamiske typer tillader variabler at ændre type i runtime. Når du anvender dynamic keywordet i C#, fortæller du kompileren, at typekontrol for den pågældende variabel skal udføres ved runtime i stedet for ved compile-time.

Warning

Det er typisk kun ved kommunikation med eksterne systemer, at dynamiske typer er nødvendige. I de fleste tilfælde er det bedre at bruge stærkt typede objekter.

Hvis man begov for typesvage objekter er der en del fordele:

  1. Fleksibilitet: Gør det muligt at skrive mere fleksibel og generisk kode, især når du interagerer med COM objekter, dynamiske biblioteker, eller .NET interop funktionaliteter.
  2. Forenkling: Forenkler nogle operationer, især når man arbejder med JSON, LINQ til XML, reflection eller late binding.
  3. Interoperabilitet: Forbedrer interoperabilitet med dynamiske sprog og APIs.

Eksempler på Dynamiske Typer

Her er nogle eksempler, der illustrerer brugen af dynamiske typer:

// Oprettelse af en dynamisk variabel
dynamic dynamiskVariabel = 10;
Console.WriteLine(dynamiskVariabel);

// Dynamiske typer kan ændre datatype
dynamiskVariabel = "Nu er jeg en streng";
Console.WriteLine(dynamiskVariabel);

// Dynamisk type med LINQ
var personListe = new List<Person> 
{
    new Person { Navn = "Peter", Alder = 28 },
    new Person { Navn = "Anna", Alder = 33 }
};

dynamic filtreredePersoner = personListe.Where(p => p.Alder > 30).ToList();
foreach (dynamic person in filtreredePersoner)
{
    Console.WriteLine($"Navn: {person.Navn}, Alder: {person.Alder}");
}

// Klasse til brug i eksemplet
public class Person
{
    public string Navn { get; set; }
    public int Alder { get; set; }
}

I det første eksempel skifter dynamiskVariabel fra at være en integer til en string i runtime. Det andet eksempel viser, hvordan dynamiske typer kan bruges i LINQ-forespørgsler.

Begrænsninger og Overvejelser

Mens dynamiske typer tilføjer fleksibilitet, er der vigtige overvejelser:

  1. Performance: Brug af dynamic kan føre til en mindre performance, da typekontrol og resolution sker i runtime.
  2. Fejlhåndtering: Fejl relateret til dynamiske typer opdages først i runtime, hvilket kan føre til runtime-fejl, der ellers ville være blevet fanget ved compile-time.
  3. Kodeklarhed: Overforbrug af dynamiske typer kan gøre koden sværere at forstå og vedligeholde.

Dynamiske typer i C# tilbyder en høj grad af fleksibilitet og er særligt nyttige, når man arbejder med dynamiske og late-bound data. De er dog bedst anvendt med forsigtighed, da de kan føre til mindre transparent og fejltilbøjelig kode. Korrekt anvendt kan dynamiske typer være et kraftfuldt værktøj i din C# værktøjskasse.