Рефлексия — это механизм в .NET, который позволяет анализировать и модифицировать структуры кода во время выполнения. Это мощный инструмент, который дает возможность работать с типами, их членами и атрибутами динамически.
Type type = typeof(string);
Console.WriteLine($"Type: {type.Name}");
Console.WriteLine($"Methods: {type.GetMethods().Length}");
object instance = Activator.CreateInstance(typeof(MyClass));
MethodInfo method = type.GetMethod("ToUpper");
string result = (string)method.Invoke("hello", null);
var attributes = type.GetCustomAttributes(false);
Сериализация/десериализация
(JSON, XML, Binary)
DI-контейнеры
(Autofac, Ninject)
ORM-системы
(Entity Framework, Dapper)
Динамические прокси
(AOP, Mocking frameworks)
Плагинные системы
(Загрузка и анализ сборок)
// Оптимизация через кэширование
private static MethodInfo _methodCache = typeof(string).GetMethod("ToUpper");
// Expression Trees для быстрых динамических вызовов
var param = Expression.Parameter(typeof(string));
var call = Expression.Call(param, _methodCache);
var lambda = Expression.Lambda<Func<string, string>>(call, param);
var func = lambda.Compile();
string result = func("hello");
Проблемы безопасности:
Сложность отладки:
Expression Trees
(Более безопасно и быстрее)
Source Generators
(Генерация кода на этапе компиляции)
Dynamic
(Для простых сценариев)
рефлексия — это мощный инструмент для метапрограммирования в .NET, который следует использовать осмотрительно. Она открывает возможности для создания гибких архитектур, но требует понимания компромиссов в производительности и безопасности.