0Pricing
C# Academy · Урок

Рефлексия в C#

Используйте рефлексию для изучения и изменения объектов во время выполнения

«Рефлексия в C#» — бесплатный урок C# Academy на CoddyKit. Это урок 5 из 5. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 5 уроков всего.

Введение в рефлексию

Понимание рефлексии в C#

Добро пожаловать на следующий урок! На этом уроке Вы узнаете о рефлексии в C# — мощной возможности, позволяющей анализировать типы и взаимодействовать с типами и объектами во время выполнения. Давайте начнём!

Рефлексия в C# — иллюстрация 1

Что такое рефлексия

Что такое рефлексия?

Рефлексия — это способность программы анализировать и изменять собственную структуру во время выполнения. Она обычно используется для:

  • получения метаданных о типах, методах и свойствах;
  • динамического вызова методов и доступа к полям;
  • создания платформ и инструментов, например сериализаторов и средств объектно-реляционного отображения.

Важный момент: Рефлексия входит в пространство имён System.Reflection.

Доступ к информации о типе

Доступ к информации о типе

Используйте класс Type, чтобы получить метаданные о типе. Пример:

Совет: Используйте GetProperties, GetMethods и GetFields, чтобы анализировать члены типа.

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

Динамическое создание объектов

Динамическое создание объектов

Вы можете использовать рефлексию для динамического создания экземпляров класса. Пример:

Важный момент: Используйте Activator.CreateInstance, чтобы создавать объекты во время выполнения.

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

Динамический вызов методов

Динамический вызов методов

Рефлексия позволяет вызывать методы во время выполнения, не зная о них во время компиляции. Пример:

Совет: Используйте GetMethod и Invoke для динамического вызова методов.

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

Работа с атрибутами

Работа с атрибутами

Рефлексию можно использовать для анализа пользовательских attributes, применённых к типам, методам или свойствам. Пример:

Важный момент: Используйте GetCustomAttributes, чтобы получить сведения об атрибутах.

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

Практическое задание

Практическое задание

Создайте программу, которая использует рефлексию для анализа класса, вывода списка его методов и свойств и динамического вызова одного из его методов. Пример:

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

Рекомендации по использованию рефлексии

Рекомендации по использованию рефлексии

Вот несколько рекомендаций:

  • Используйте рефлексию умеренно, поскольку она может влиять на производительность.
  • Кэшируйте результаты рефлексии, чтобы повысить эффективность повторных вызовов.
  • По возможности отдавайте предпочтение решениям, работающим во время компиляции, а не рефлексии.
  • Используйте рефлексию для динамических сценариев, например подключаемых модулей и платформ.

Совет: Сочетайте рефлексию с пользовательскими attributes для создания гибких и динамичных приложений.

Отличная работа!

Отличная работа!

Поздравляю! Вы научились использовать рефлексию для анализа и изменения типов во время выполнения в C#. На этом завершается категория "«Расширенные возможности C#»". Давайте перейдём к новым приключениям в программировании!

Рефлексия в C# — иллюстрация 10

Часто задаваемые вопросы

Урок «Рефлексия в C#» бесплатный?

Да — полный текст урока «Рефлексия в C#» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 5 уроков всего.

Чему я научусь в уроке «Рефлексия в C#»?

Используйте рефлексию для изучения и изменения объектов во время выполнения Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 5 из 5.

Сколько времени занимает урок «Рефлексия в C#»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Обобщения в C#
  2. Async и Await: работа с асинхронным кодом
  3. Потоки и задачи
  4. Делегаты и лямбда-выражения
  5. Рефлексия в C#
← Назад к C# Academy