0Pricing
C# Academy · Lekcja

Refleksja w C#

Używaj refleksji do sprawdzania i modyfikowania obiektów w czasie działania programu

Refleksja w C# to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 5 z 5. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 5 lekcji w sumie.

Wprowadzenie do refleksji

Zrozumienie refleksji w języku C#

Witamy w kolejnej lekcji! W tej lekcji poznają Państwo refleksję w języku C# — zaawansowaną funkcję, która umożliwia inspekcję typów i obiektów oraz interakcję z nimi w czasie wykonywania. Zaczynajmy!

Refleksja w C# — ilustracja 1

Czym jest refleksja

Czym jest refleksja?

Refleksja to możliwość analizowania i modyfikowania przez program własnej struktury w czasie wykonywania. Jest powszechnie używana do:

  • Uzyskiwania metadanych dotyczących typów, metod i właściwości.
  • Dynamicznego wywoływania metod i uzyskiwania dostępu do pól.
  • Tworzenia struktur i narzędzi, takich jak serializatory i systemy ORM.

Najważniejsza informacja: Refleksja jest częścią przestrzeni nazw System.Reflection.

Uzyskiwanie informacji o typie

Uzyskiwanie informacji o typie

Proszę używać klasy Type do uzyskiwania metadanych dotyczących typu. Przykład:

Wskazówka: Proszę używać metod GetProperties, GetMethods i GetFields do analizowania elementów członkowskich typu.

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);
        }
    }
}

Dynamiczne tworzenie obiektów

Dynamiczne tworzenie obiektów

Refleksji można używać do dynamicznego tworzenia instancji klasy. Przykład:

Najważniejsza informacja: Proszę używać Activator.CreateInstance do tworzenia obiektów w czasie wykonywania.

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));
    }
}

Dynamiczne wywoływanie metod

Dynamiczne wywoływanie metod

Refleksja umożliwia wywoływanie metod w czasie wykonywania bez znajomości ich definicji w czasie kompilacji. Przykład:

Wskazówka: Proszę używać GetMethod i Invoke do dynamicznego wywoływania metod.

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" });
    }
}

Praca z atrybutami

Praca z atrybutami

Refleksji można używać do analizowania niestandardowych atrybutów zastosowanych do typów, metod lub właściwości. Przykład:

Najważniejsza informacja: Proszę używać GetCustomAttributes do pobierania informacji o atrybutach.

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);
        }
    }
}

Zadanie praktyczne

Zadanie praktyczne

Proszę utworzyć program, który używa refleksji do przeanalizowania klasy, wyświetlenia jej metod i właściwości oraz dynamicznego wywołania jednej z jej metod. Przykład:

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);
    }
}

Najlepsze praktyki korzystania z refleksji

Najlepsze praktyki korzystania z refleksji

Oto kilka najlepszych praktyk:

  • Proszę używać refleksji oszczędnie, ponieważ może ona negatywnie wpływać na wydajność.
  • Proszę buforować wyniki refleksji, aby zwiększyć wydajność powtarzanych wywołań.
  • Jeśli to możliwe, proszę wybierać rozwiązania działające w czasie kompilacji zamiast refleksji.
  • Proszę używać refleksji w scenariuszach dynamicznych, takich jak wtyczki i struktury programistyczne.

Wskazówka: Proszę łączyć refleksję z niestandardowymi atrybutami w celu tworzenia elastycznych i dynamicznych aplikacji.

Świetna robota!

Świetna robota!

Gratulacje! Nauczyli się Państwo używać refleksji do analizowania i modyfikowania typów w czasie wykonywania w języku C#. To kończy kategorię "Zaawansowane funkcje języka C#". Proszę przejść dalej i odkrywać kolejne zagadnienia programistyczne!

Refleksja w C# — ilustracja 10

Często zadawane pytania

Czy lekcja „Refleksja w C#” jest bezpłatna?

Tak — pełny tekst „Refleksja w C#” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 5 lekcji w sumie.

Co nauczysz się w „Refleksja w C#”?

Używaj refleksji do sprawdzania i modyfikowania obiektów w czasie działania programu Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 5 z 5.

Ile czasu zajmuje lekcja „Refleksja w C#”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typy generyczne w C#
  2. Async i await: praca z kodem asynchronicznym
  3. Wątki i zadania
  4. Delegaty i lambdy
  5. Refleksja w C#
← Powrót do C# Academy