Знакомы с рефлексией в шарпе?



И так, сегодня поговорим про рефлексию в 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[] { "Привет, рефлексия!" });




🔥 Получается, рефлексия даёт нам возможность вызывать методы, чьи имена мы знаем только во время выполнения.



Звучит круто, но без правильной проверки это может обернуться проблемами.



➡️ C# Ready | #практика