Reflection: Çalışma Zamanında Nesne Özelliklerini İnceleme

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

C# Reflection: Çalışma Zamanında Kodun Röntgenini Çekmek​


Reflection, bir programın kendi meta verilerine (metadata) erişmesini sağlayan bir teknolojidir. System.Reflection kütüphanesi sayesinde, bir nesnenin türünü, metodlarını, özelliklerini ve özniteliklerini (attributes) henüz uygulama çalışırken keşfedebilir ve yönetebilirsiniz.



1. Reflection ile Neler Yapılabilir?​


Reflection, statik kod yazımının sınırlarını aşmanızı sağlar:

  • []Bir nesnenin hangi sınıftan türetildiğini bulabilirsiniz.
    []Sınıfın içindeki tüm metotları, değişkenleri ve property'leri listeleyebilirsiniz.
    []İsmini bildiğiniz bir metodu dinamik olarak tetikleyebilirsiniz.
    []Erişim belirleyicilerini (private, protected) aşarak gizli üyelere ulaşabilirsiniz.
  • Çalışma zamanında yeni nesneler oluşturabilirsiniz.



2. Temel Kullanım: Type Sınıfı​


Reflection'ın kalbi Type sınıfıdır. Bir nesnenin tip bilgilerine ulaşmak için GetType() veya typeof() kullanılır.

C#:
using System.Reflection;

public class Araba
{
public string Marka { get; set; }
public void Calistir() { }
}

// Bilgileri alma
Type t = typeof(Araba);

Console.WriteLine("SınıfAdı:t.Name");Console.WriteLine("Namespace: {t.Namespace}");

// Metotları listeleme
foreach (MethodInfo m in t.GetMethods())
{
Console.WriteLine($"Metot: {m.Name}");
}



3. Dinamik Metot Tetikleme (Invoke)​


Diyelim ki elinizde bir nesne var ve hangi metodu çağıracağınıza çalışma zamanında (örneğin kullanıcıdan gelen bir metne göre) karar vermek istiyorsunuz.

C#:
Araba benimArabam = new Araba();
Type t = benimArabam.GetType();

// "Calistir" isimli metodu bul
MethodInfo method = t.GetMethod("Calistir");

// Metodu çalıştır (Invoke)
method.Invoke(benimArabam, null);



4. Reflection Neden Dikkatli Kullanılmalı?​


Reflection çok güçlüdür ancak "büyük güç büyük sorumluluk getirir" kuralı burada da geçerlidir:

DezavantajAçıklama
PerformansStatik koda göre çok daha yavaştır. Derleyici optimizasyonlarını atlar.
GüvenlikPrivate alanlara erişebildiği için kapsülleme (encapsulation) kurallarını deler.
Hata RiskiYazım hataları derleme anında değil, çalışma anında (Runtime) patlar.



Sonuç: Gerçek Dünyada Nerede Kullanılır?​


Reflection'ı günlük iş mantığı kodlarında pek görmezsiniz. Ancak kullandığınız neredeyse tüm modern araçların (Entity Framework, JSON.NET, Dependency Injection konteynerleri, Unit Test araçları) temelinde Reflection yatar. Örneğin, bir JSON verisini bir sınıfa dönüştürürken kütüphane, sınıfınızın hangi property'lere sahip olduğunu Reflection ile anlar.
 
Geri
Üst