C# Academy · leksjon

Forstå refleksjon i C#

Bruk refleksjon til å undersøke og manipulere objekter under kjøring

Leksjon 5 av 510 trinn

Forstå refleksjon i C# er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 5 av 5. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 5 leksjoner.

Introduksjon til refleksjon

Forstå refleksjon i C#

Velkommen til neste leksjon! I denne leksjonen lærer du om refleksjon i C#, en kraftig funksjon som gjør det mulig å undersøke og samhandle med typer og objekter under kjøring. La oss begynne!

Forstå refleksjon i C# — illustrasjon 1

Hva er refleksjon?

Refleksjon er et programs evne til å undersøke og endre sin egen struktur under kjøring. Det brukes ofte til:

  • Å få tilgang til metadata om typer, metoder og egenskaper.
  • Å kalle metoder dynamisk og få tilgang til felt.
  • Å bygge rammeverk og verktøy som serialiserere og ORM-er.

Viktig poeng: Refleksjon er en del av navneområdet System.Reflection.

Få tilgang til typeinformasjon

Bruk klassen Type for å få tilgang til metadata om en type. Eksempel:

Tips: Bruk GetProperties, GetMethods og GetFields for å undersøke typemedlemmer.

using System;

class SampleClass {
    public int Id { get; set; }
    public string Name { get; set; }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);

        Console.WriteLine("Type Name: " + type.Name);
        Console.WriteLine("Properties:");
        foreach (var prop in type.GetProperties()) {
            Console.WriteLine("- " + prop.Name);
        }
    }
}

Opprette objekter dynamisk

Du kan bruke refleksjon til å opprette forekomster av en klasse dynamisk. Eksempel:

Viktig poeng: Bruk Activator.CreateInstance for å opprette objekter under kjøring.

using System;

class SampleClass {
    public string Name { get; set; }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        object instance = Activator.CreateInstance(type);

        var property = type.GetProperty("Name");
        property.SetValue(instance, "Reflection Example");

        Console.WriteLine("Name: " + property.GetValue(instance));
    }
}

Kalle metoder dynamisk

Refleksjon gjør det mulig å kalle metoder under kjøring uten å kjenne til dem ved kompilering. Eksempel:

Tips: Bruk GetMethod og Invoke for dynamiske metodekall.

using System;

class SampleClass {
    public void Greet(string name) {
        Console.WriteLine("Hello, " + name);
    }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        object instance = Activator.CreateInstance(type);

        var method = type.GetMethod("Greet");
        method.Invoke(instance, new object[] { "World" });
    }
}

Arbeide med attributter

Refleksjon kan brukes til å undersøke egendefinerte attributter som er brukt på typer, metoder eller egenskaper. Eksempel:

Viktig poeng: Bruk GetCustomAttributes for å hente attributtinformasjon.

using System;

[AttributeUsage(AttributeTargets.Class)]
class SampleAttribute : Attribute {
    public string Description { get; }
    public SampleAttribute(string description) {
        Description = description;
    }
}

[Sample("This is a sample class.")]
class SampleClass {}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        var attributes = type.GetCustomAttributes(typeof(SampleAttribute), false);

        foreach (SampleAttribute attr in attributes) {
            Console.WriteLine("Description: " + attr.Description);
        }
    }
}

Øvingsoppgave

Opprett et program som bruker refleksjon til å undersøke en klasse, vise metodene og egenskapene dens og kalle én av metodene dynamisk. Eksempel:

using System;

class SampleClass {
    public int Add(int a, int b) {
        return a + b;
    }
}

class Program {
    static void Main() {
        Type type = typeof(SampleClass);
        Console.WriteLine("Methods:");
        foreach (var method in type.GetMethods()) {
            Console.WriteLine("- " + method.Name);
        }

        object instance = Activator.CreateInstance(type);
        var addMethod = type.GetMethod("Add");
        int result = (int)addMethod.Invoke(instance, new object[] { 5, 3 });

        Console.WriteLine("Result of Add: " + result);
    }
}

Beste praksis for bruk av refleksjon

Her er noen anbefalte fremgangsmåter:

  • Bruk refleksjon med måte, siden det kan påvirke ytelsen.
  • Mellomlagre refleksjonsresultater for å forbedre effektiviteten ved gjentatte kall.
  • Foretrekk løsninger som avgjøres ved kompilering fremfor refleksjon når det er mulig.
  • Bruk refleksjon i dynamiske scenarioer som programtillegg og rammeverk.

Tips: Kombiner refleksjon med egendefinerte attributter for fleksible og dynamiske applikasjoner.

Godt jobbet!

Gratulerer! Du har lært hvordan du bruker refleksjon til å undersøke og endre typer under kjøring i C#. Dette avslutter kategorien "Advanced C# Features". La oss gå videre til flere kodeeventyr!

Forstå refleksjon i C# — illustrasjon 10
Gratis å komme i gang

Lær deg C# med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
93
Leksjoner
346

Ofte stilte spørsmål

Er leksjonen «Forstå refleksjon i C#» gratis?

Ja – hele teksten i «Forstå refleksjon i C#» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 5 leksjoner.

Hva lærer jeg i «Forstå refleksjon i C#»?

Bruk refleksjon til å undersøke og manipulere objekter under kjøring Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C# Academy?

Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 5 av 5.

Hvor lang tid tar leksjonen «Forstå refleksjon i C#»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?

Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Generics i C#
  2. Async og Await: Arbeide med asynkron kode
  3. Forstå tråder og oppgaver
  4. Utforske delegater og lambdaer
  5. Forstå refleksjon i C#
← Tilbake til C# Academy