मैं एक कन्स्ट्रक्टर में वर्चुअल सदस्य को कॉल करने के प्रभावों का परीक्षण कर रहा था, और पाया कि उस सदस्य को कॉल करते समय परिणामस्वरूप अपवाद TargetInvocationException
के भीतर लपेटा गया था।आभासी सदस्यों को प्रतिबिंब (सामान्य परिस्थितियों में) के माध्यम से बुलाया जाता है?
docs के अनुसार यह है:
अपवाद है कि प्रतिबिंब
के माध्यम से लागू तरीकों से फेंक दिया जाता है फिर भी मैं प्रतिबिंब के माध्यम से किसी भी invokations से अनभिज्ञ हूं। तो क्या यह का मतलब है आभासी सदस्यों को हमेशा प्रतिबिंब के माध्यम से बुलाया जाता है? यदि ऐसा नहीं है तो इस मामले में ऐसा क्यों है?
कोड:
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 "थोड़ा भ्रामक" के लिए +1, यह दस्तावेज़ों के कहने के लिए एक गहरी भ्रमित चीज है। कोई एक कंसोल ऐप लिख सकता है जिसने 'नया लक्ष्य इनवोकेशन अपवाद();' को छोड़कर कुछ भी नहीं किया; '- फिर प्रतिबिंब कहां होगा? – AakashM
मैं समझता हूं कि _why_ वर्चुअल सदस्यों को कन्स्ट्रक्टर से नहीं बुलाया जाना चाहिए, यही कारण है कि मुझे –
@ m.edmondson Apologies को आजमाने की कोशिश की गई, मैं इसे 'मैं के प्रभावों का परीक्षण कर रहा था' के बारे में आपकी लाइन से समझ गया, मैं मेरे जवाब को संवेदना देने का इरादा नहीं था (लेकिन मुझे लगता है कि यह अब हो सकता है), मैंने केवल इस उत्तर को देखने वाले अन्य लोगों के लिए पूर्णता के लिए अंतिम कुछ पैराग्राफ शामिल किए हैं। मैं rephrase करने की कोशिश करेंगे। –