2009-11-30 10 views
6

मैं अभी भी अपने गहरे और पुराने ज्ञान को सी/सी ++ से कुछ और उथले तक मैप करने की कोशिश कर रहा हूं। नेट ज्ञान। आज समय सी # में "जैसा" (और स्पष्ट रूप से "है" और कास्ट) आया है।COM में QueryInterface की तुलना में "as" की लागत क्या है या C++ में dynamic_cast?

"as" का मेरा मानसिक मॉडल यह है कि यह QueryInterface या dynamic_cast (dynamic_cast पॉइंटर तर्क के साथ, संदर्भ नहीं है, जो है) सी # के लिए। मेरा सवाल दो गुना है:

  1. क्या मेरी तुलना मेला है?
  2. QueryInterface या dynamic_cast की तुलना में "as" की सापेक्ष लागत क्या है?

उत्तर

4
  1. हां तुलना उचित है, खासकर जब संकेत के साथ काम कर। तीनों में से प्रत्येक या तो सफल होता है और लक्ष्य प्रकार का एक गैर-शून्य सूचक देता है, या शून्य देता है।

  2. आप वास्तव में as ऑपरेटर जब नेट में COM ऑब्जेक्ट के साथ काम कर इससे प्रबंधित/COM इंटरॉप के लिए भूमि के ऊपर की एक छोटी राशि के साथ QueryInterface के बराबर बनाने का उपयोग कर सकते हैं। सीएलआर (प्रबंधित प्रकारों के बीच कास्टिंग) के अंदर, as ऑपरेटर अत्यधिक सीओ + में QueryInterface की तुलना में हल्के वजन या dynamic_cast में सी ++ में हल्का वजन है। मेरे कोड के सभी स्थानों के लिए जहां में कुछ कारणों से गतिशील कास्टिंग का उपयोग करने के लिए था, मैंने कभी भी as ऑपरेटर को प्रोफाइलिंग में एक नमूना दिखाया नहीं है - और विचार करते हुए कि मैं गतिशील रूप से टाइप किए गए, रनटाइम-बाध्य के कार्यान्वयन को बनाए रखता हूं भाषा (स्ट्रिंग टेम्पलेट), मुझे लगता है कि इसका मतलब कुछ है। :)

संबंधित मुद्दे