Знакомы с рефлексией в шарпе?
И так, сегодня поговорим про рефлексию в C#. Она позволяет работать с типами и методами на этапе выполнения, но надо быть осторожным, если использовать её неправильно, можно не только замедлить программу, но и оставить уязвимости.
Давайте начнём с простого примера. Вот как можно вывести все методы класса string:
Это удобно, когда нужно проанализировать класс, но если таких операций много и без фильтрации, то они могут сильно нагрузить систему.
Теперь представьте ситуацию, когда имя класса передаётся в строке:
Такие штуки часто используют в плагинах или динамических системах, но тут важен контроль за входными данными, чтобы избежать ошибок или даже уязвимостей.
И, наконец, вызов метода через рефлексию:
🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.
Звучит круто, но без правильной проверки это может обернуться проблемами.
➡️ C# Ready | #практика
И так, сегодня поговорим про рефлексию в C#. Она позволяет работать с типами и методами на этапе выполнения, но надо быть осторожным, если использовать её неправильно, можно не только замедлить программу, но и оставить уязвимости.
Давайте начнём с простого примера. Вот как можно вывести все методы класса string:
Type type = typeof(string);
var methods = type.GetMethods();
foreach (var method in methods)
Console.WriteLine(method.Name);
Это удобно, когда нужно проанализировать класс, но если таких операций много и без фильтрации, то они могут сильно нагрузить систему.
Теперь представьте ситуацию, когда имя класса передаётся в строке:
string className = "System.Text.StringBuilder";
Type type = Type.GetType(className);
var instance = Activator.CreateInstance(type);
// StringBuilder
Console.WriteLine(instance?.GetType().Name);
Такие штуки часто используют в плагинах или динамических системах, но тут важен контроль за входными данными, чтобы избежать ошибок или даже уязвимостей.
И, наконец, вызов метода через рефлексию:
Type type = typeof(Console);
var method = type.GetMethod("WriteLine", new[] { typeof(string) });
method?.Invoke(null, new object[] { "Привет, рефлексия!" });
🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.
Звучит круто, но без правильной проверки это может обернуться проблемами.