Sanal bir üyeyi yapıcıda çağırmanın etkilerini test ediyordum ve bu üye çağırılırken, sonuç istisnasının bir TargetInvocationException
içine sarıldığını keşfettim.Sanal üyeler yansıma yoluyla çağrılıyor mu (normal şartlarda)?
docs göre şudur: yansıması
içinden çağrılan yöntemlerle atılır
istisna Ancak yansıma yoluyla herhangi invokations habersiz değilim. Yani bu ortalama sanal üyelere her zaman yansıma aracılığıyla çağrılıyor? Eğer bu durumda neden olmasın?
kodu:
class ClassA { public ClassA() { SplitTheWords(); } public virtual void SplitTheWords() { //I've been overidden } } class ClassB : ClassA { private readonly String _output; public ClassB() { _output = "Constructor has occured"; } public override void SplitTheWords() { String[] something = _output.Split(new[]{' '}); //TargetInvocationException! } }
1, yani dokümanlar söylemek için derin kafa karıştırıcı bir şey. Yeni TargetInvocationException() 'ı atmak dışında hiçbir şey yapmayan bir konsol uygulaması yazılabilir: - o zaman yansıma nerede olur? – AakashM
_Why_ sanal üyelerinin kuruculardan çağrılmamasını anlıyorum, bu beni denememi sağlayan şey budur –
@ m.edmondson Özür dilerim, bunu 'Sizin etkilerini test ediyordum' hakkındaki satırınızdan anladım. Cevabımın küçümseyici olmasını istemedim (ama şimdi olabileceğini düşünüyorum), bu cevabı gören diğer kişiler için sadece son birkaç paragrafı tamamladım. Tekrar ifade etmeye çalışacağım. –