Aldatma değildir, ancak herhangi bir araç gibi, çözülmesi amaçlanan şey için kullanılmalıdır. Yansıma, tanımı gereği, kodu kod aracılığıyla incelemenize ve değiştirmenize olanak sağlar; Yapmanız gereken şey buysa, yansıma işin aracıdır. Yansıma tamamen meta-kodla ilgilidir: Kodu hedef alan kod (verileri hedef alan normal kodun aksine).
İyi yansıma kullanımına bir örnek, genel web hizmeti arayüz sınıflarıdır: Tipik bir tasarım, protokol uygulamasını yük taşıma fonksiyonundan ayırmaktır. Öyleyse T
yükünüzü uygulayan bir sınıf (diyelim ) ve protokolü ( P
) uygulayan başka bir sınıfınız var . T
oldukça basittir: yapmak istediğiniz her arama için, ne yapması gerekiyorsa onu yapan bir yöntem yazmanız yeterlidir. P
Ancak, web servis aramalarını metot aramalarına eşlemek gerekir. Bu eşlemeyi jenerik yapmak arzu edilir, çünkü fazlalıktan kaçınır ve P
yeniden kullanılabilir hale getirir . Reflection, sınıfın T
çalışma zamanında kontrol edilmesi ve P
herhangi bir sınıf derleme bilgisi olmadan web servis protokolü üzerinden geçirilen dizgelere dayanarak yöntemlerini çağırmanın yolunu sunar.T
. 'Kod hakkında kod' kuralını kullanarak, bir sınıfın P
kodunun T
verilerinin bir parçası olarak sınıfta olduğu iddia edilebilir .
Ancak.
Yansıma ayrıca, dilin tip sisteminin kısıtlamalarını aşmanız için araçlar sunar - teorik olarak, tüm parametreleri tür olarak geçirebilir object
ve yöntemlerini yansımalar yoluyla çağırabilirsiniz. Güçlü statik yazma disiplini uygulaması beklenen dil Voilà, artık geç bağlayıcılı dinamik olarak yazılmış bir dil gibi davranıyor, sadece sözdiziminin çok daha karmaşık olduğunu gösteriyor. Şimdiye dek gördüğüm bu tür bir örüntüün her bir örneği kirli bir hack olmuş ve her zaman dilin tip sistemindeki bir çözüm mümkün olacaktı ve her bakımdan daha güvenli, daha zarif ve daha verimli olacaktı. .
İlgili olmayan çeşitli veri kaynağı türlerine verilere bağlı olabilen GUI kontrolleri gibi birkaç istisna vardır; Verilerinizin belirli bir arabirim oluşturmasını zorunlu kılar, böylece verileri gerçekçi bir şekilde bağlayabilirsiniz, programcının her veri kaynağı türü için bir adaptör uygulaması yoktur. Bu durumda, veri kaynağının türünü tespit etmek için yansıma kullanmak ve veri bağlanmasını ayarlamak daha faydalı bir seçimdir.