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.