TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.6K subscribers
Post #6173 4.21K
🔍 Шпаргалка по рефлексии в C#

Рефлексия — это когда ты можешь во время выполнения программы подглядеть, что внутри класса, вызвать метод по имени или даже достучаться до приватного поля (немного читерства, но работает).

Получение типа:
Type t = typeof(string);             // по имени типа
Type t2 = "hello".GetType(); // у объекта
Type t3 = Type.GetType("System.Int32"); // по строке


Информация о типе:
Console.WriteLine(t.FullName);       // полное имя типа
Console.WriteLine(t.Namespace); // пространство имён
Console.WriteLine(t.IsClass); // это класс?
Console.WriteLine(t.IsValueType); // это value-type?


Список методов:
foreach (var m in t.GetMethods())
{
Console.WriteLine(m.Name);
}


Список свойств:
foreach (var p in t.GetProperties())
{
Console.WriteLine($"{p.Name} : {p.PropertyType}");
}


Создание экземпляра динамически:
Type t = typeof(DateTime);
object obj = Activator.CreateInstance(t, 2025, 8, 19);
Console.WriteLine(obj);


Вызов метода через рефлексию:
Type t = typeof(string);
MethodInfo m = t.GetMethod("Contains", new[] { typeof(string) });
bool result = (bool)m.Invoke("ChatGPT", new object[] { "GPT" });
Console.WriteLine(result); // true


Доступ к полю:
class Person { public string Name = "Alice"; }
var p = new Person();
FieldInfo f = typeof(Person).GetField("Name");
Console.WriteLine(f.GetValue(p)); // Alice
f.SetValue(p, "Bob");
Console.WriteLine(p.Name); // Bob


Доступ к приватному полю:
class Secret { private int code = 1337; }
var s = new Secret();
FieldInfo f = typeof(Secret).GetField("code",
BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine(f.GetValue(s)); // 1337


Вызов приватного метода:
class Hidden { private void SayHi() => Console.WriteLine("Hi!"); }
var h = new Hidden();
MethodInfo m = typeof(Hidden).GetMethod("SayHi",
BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(h, null); // Hi!


Полезно для написания ORM, DI-контейнеров, сериализаторов.

🐸Библиотека шарписта

#буст
  • 👍 16
  • 🥱 4
  • 👾 2
  • ❤ 1
  • 🤔 1
More from @csharpproglib
  1. Sep 30, 2026📝 Логирование со строковой интерполяцией Логирование c интерполяцией строк один из самых…
  2. Sep 28, 2026👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработа…
  3. Sep 26, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
  4. Sep 25, 2026🔐 NuGet: Microsoft меняет сертификат подписи С 23 сентября Microsoft использует новый сер…
  5. Sep 24, 2026🤩 Как поймать зависший .NET-сервис Приложение начинает тормозить, запросы зависают, а в л…
  6. Sep 23, 2026⚙️ yield return не бесплатный Итераторы выглядят просто, но работают иначе: IEnumerable<in…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →