2010-10-20 14 views
5

Dinamik nesne parametresini (ör. Dinamik foo) kabul eden bir dizi veri erişim yöntemim var. Mevcut koddan dolayı giriş parametresini yazmak için bir arayüz kullanamıyorum. Veri erişim yöntemlerinde özellikler ayarlıyorum, ancak özelliklerin/yöntemlerin var olup olmadığını kontrol etmeden dinamik kullanmak beni sinirlendiriyor.Yansıma, dinamik bir nesnede özellik/yöntemin varlığını/yokluğunu belirlemenin en iyi yolu nedir?

Dinamik bir nesnenin çalışma zamanı özelliklerini/yöntemlerini denetlemenin bir yolunu arıyorum, ancak performans etkisinden dolayı yansımayı kullanmamayı tercih ediyorum. Dinamik bir nesnenin özelliklerini/yöntemlerini sorgulamak için önerilen başka bir yol var mı?

sayesinde Erick

+0

Performans etkisinden dolayı yansıma kullanmak istemezsiniz, ancak kullanmaktan mutluluk duyarız * dinamik *? –

+0

@Kirk: Dinamik, şaşırtıcı derecede iyi performans gösteriyor. Üye olmak için yansımadan biraz daha hızlıdır ... –

+1

Siz * düşünün * onlar bir performans etkisi olacaklar ya da * biliyorsunuz *? Tasarım kararları gerçekler üzerinde daha iyi yapılır. – smirkingman

cevap

2

Yansıma aslında dynamic türünde çalışmıyor (beklediğiniz gibi). IDynamicMetaObjectProvider için denetlemeniz gerekir, daha sonra bir üye türünde kullanılabilir olup olmadığını belirlemek için yöntemlerini kullanın. Sorun, çalışma zamanında yeni üyeler eklemek için dynamic türünün mükemmel kabul edilebilir olmasıdır. Örneğin, bkz. ExpandoObject. Sadece set operasyonlar yeni üyeler ekler, ancak, aynı kolaylıkla, hep ne olursa olsun içine geçirilir geçerli bir üyesi döndüren bir dinamik türü, yani yapabiliriz:

dynamic myType = new DynamicFoo(); 
Console.WriteLine(myType.Foo); 
Console.WriteLine(myType.Bar); 
Console.WriteLine(myType.Baz); 

Bu yapılabilir get accessor'u geçersiz kılmak ve sadece onları her zaman geçerli kılmak. Bu durumda, yansıma burada neyin işe yaradığını söylemenin bir yolu olmazdı ...

+0

Reed, bu benim ihtiyacım olan cevaptı ama onu denemeye ve istisnanın atılmasına izin vermeye karar verdim. Teşekkürler! –

2

Ben biraz farklı bu soruna bakmak istiyorum. Nesneleri dynamic ile kullanıyorsanız, özelliklerin yansıtma yoluyla erişilebilir olup olmadığına bakmak ilgisizdir. Sadece dynamic aracılığıyla erişilebiliyorsa önemlidir. Öyleyse neden sadece özellikleri kullanmıyor ve onların yokluğundan kaynaklanan idamları yakalamıyorsunuz?

+0

+1 benden - bu benim yaklaşımım olurdu. Sadece nesneyi kullanın ve istisnaları/geldikleri gibi ele alın. –

+0

@Reed, 100K'da tebrikler! – JaredPar

+0

Teşekkürler! Sadece bu sabahı geçtim: D –

İlgili konular