CodeBlanks Logo Icon CodeBlanks

Mirror

InstanceMirror ve ClassMirror öğrenirsin.

InstanceMirror ve ClassMirror

dart:mirrors'da reflect(obj) bir InstanceMirror döndürür. Bu mirror üzerinden nesnenin alanlarına ve metotlarına erişilir.

reflectClass(T) ise bir ClassMirror verir. ClassMirror ile sınıfın alanlarını, metotlarını ve üst türlerini listeleyebilirsin.

Örnek: var m = reflect(u); print(m.type.simpleName);. simpleName bir Symbol'dür; MirrorSystem.getName(sym) ile metne çevrilir.

Symbol ve getName

Mirror API'sinde isimler Symbol olarak temsil edilir. Symbol('name') ya da #name literal'i ile oluşturulur.

Bir Symbol'ü metne çevirmek için MirrorSystem.getName(symbol) çağrılır. Örnek: MirrorSystem.getName(#hello) → 'hello'.

Symbol'ler minification (kod küçültme) sırasında korunur; bu yüzden reflection ile erişilebilir alanlar Symbol olarak tutulur.

Uygulama Sınıf alanlarına runtimeType ile bak

class Point { double x; double y; Point(this.x, this.y); } tanımla. main içinde var p = Point(3.0, 4.0); oluştur; print(p.runtimeType); ve print(p.x); ekle.

Başlangıç kodu

main.dart
void main() {
  // Point sınıfını tanımla (main dışında)
  // örnek oluştur; runtimeType ve x yazdır
}

Örnek çözüm

main.dart
class Point {
  double x;
  double y;
  Point(this.x, this.y);
}

void main() {
  var p = Point(3.0, 4.0);
  print(p.runtimeType);
  print(p.x);
}

Beklenen çıktı

Point
3.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Nesne yansıması

Soru
var m = ____(u);
Cevap
var m = reflect(u);

Açıklama: reflect(u) bir InstanceMirror döndürür.

2 reflectClass ne döndürür?

  • Symbol
  • InstanceMirror
  • Type
  • ClassMirror Doğru cevap

Açıklama: reflectClass bir ClassMirror döndürür.

3 Mirror kavramlarını eşleştir

Kavram Anlamı
reflect(obj) InstanceMirror
reflectClass(T) ClassMirror
Symbol İsim soyutlaması
getName Metne çevirme

İleri seviye bölümündeki tüm dersler