Gå til indholdet

Introduktion til reflection

C# reflection er en kraftfuld funktion, der giver dig mulighed for at inspicere og manipulere metadata for typer under kørsel. Med reflection kan du dynamisk udforske og interagere med assemblies, typer og deres medlemmer (som metoder, egenskaber og felter), selv når du ikke har detaljer om dem på forhånd.

Nøgleelementerne i reflection inkluderer:

  • Assemblys: Du kan indlæse assemblies og udforske deres typer og referencer.
  • Typer: Få information om klasser, strukturer, interfaces og enum-typer.
  • Medlemmer: Undersøg metoder, egenskaber, felter, konstruktører og events på en type.
  • Instansskabelse og metodekald: Skab objekter dynamisk og kald metoder ved hjælp af reflection.

Warning

Vær forsigtig med reflection, da det kan føre til både kompleks kode og problemer med performance hvis det bruges uhensigtsmæssigt.

Her er et simpelt eksempel på brug af reflection til at inspicere en type:

using System;
using System.Reflection;

class Example
{
    public void MethodA() { }
    public int MethodB(int x) => x * 2;

    static void Main()
    {
        // Få typeinformationen for klassen
        Type exampleType = typeof(Example);

        // Hent alle metoder i klassen
        MethodInfo[] methods = exampleType.GetMethods(BindingFlags.Public | BindingFlags.Instance);

        // Udskriv navnene på alle metoder
        foreach (MethodInfo method in methods)
        {
            Console.WriteLine($"Method: {method.Name}");
        }
    }
}

I dette eksempel bruges GetMethods til at hente en liste over alle offentlige metoder i Example-klassen, og derefter udskrives deres navne. BindingFlags bruges til at specificere, hvilke metoder der skal returneres (f.eks. kun offentlige, private, statiske osv.). Se evt. enums for en forklaring på flags.

Info

Prøv eksempelvis pakken MCronberg.CSCourseHelper.Standard som blandt andet indeholder en extension metode til objekt, der viser yderligere info om instanser.