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

Что такое рефлексия
Что такое рефлексия?
Рефлексия — это способность программы анализировать и изменять собственную структуру во время выполнения. Она обычно используется для:
- получения метаданных о типах, методах и свойствах;
- динамического вызова методов и доступа к полям;
- создания платформ и инструментов, например сериализаторов и средств объектно-реляционного отображения.
Важный момент: Рефлексия входит в пространство имён 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#» бесплатный?
Да — полный текст урока «Рефлексия в 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 — локальная установка не требуется.
Все уроки этого курса
- Обобщения в C#
- Async и Await: работа с асинхронным кодом
- Потоки и задачи
- Делегаты и лямбда-выражения
- Рефлексия в C#