मैं कुछ के विभिन्न उपवर्गों, और एक एल्गोरिथ्म जो उन उपवर्गों के उदाहरण पर चल रही है, और अगर एल्गोरिथ्म के व्यवहार से थोड़ा क्या विशेष उपवर्ग एक उदाहरण है पर निर्भर करता है, तो सबसे सामान्य वस्तु उन्मुख यह करने के लिए जिस तरह से है, तो आभासी तरीकों का उपयोग कर रहा है।रन-टाइम प्रकार की जानकारी का उपयोग कब करें?
उदाहरण के लिए यदि उप-वर्ग डीओएम नोड्स हैं, और यदि एल्गोरिदम एक बच्चे नोड डालना है, तो यह एल्गोरिदम अलग-अलग होता है कि क्या माता-पिता नोड एक डीओएम तत्व (जिसमें बच्चे हो सकते हैं) या डोम टेक्स्ट (जो ' टी): और इतने insertChildren
विधि DomNode
आधार वर्ग में आभासी (या सार), और DomElement
और DomText
उपवर्गों में से प्रत्येक में अलग ढंग से लागू किया जा सकता है।
एक और संभावना उदाहरणों को एक आम संपत्ति प्रदान करती है, जिसका मूल्य पढ़ा जा सकता है: उदाहरण के लिए एल्गोरिदम DomNode
बेस क्लास की संपत्ति पढ़ सकता है; या किसी अन्य उदाहरण के लिए, आपके पास नेटवर्क पैकेट के विभिन्न प्रकार (उप-वर्ग) हो सकते हैं, जो एक सामान्य पैकेट हेडर साझा करते हैं, और आप यह देखने के लिए पैकेट हेडर पढ़ सकते हैं कि यह किस प्रकार का पैकेट है।
मैं रन-टाइम-प्रकार की जानकारी का उपयोग नहीं किया ज्यादा, सहित:
is
औरas
सी #- डॉट नेट में
- Object.GetType विधि downcasting में कीवर्ड
typeid
ऑपरेटर सी ++
जब मैं एक नया एल्गोरिथ जोड़ रहा हूं मी जो सबक्लास के प्रकार पर निर्भर करता है, मैं कक्षा पदानुक्रम में एक नई आभासी विधि जोड़ने के बजाय बदलता हूं।
मेरा सवाल है, वर्चुअल फ़ंक्शंस के बजाय रन-टाइम-प्रकार की जानकारी का उपयोग करना उचित है?
यह कहने का क्या कारण है कि आरटीटीआई को हटा दिया गया है, अंतिम उपाय का एक तरीका? – ChrisW
@ChrisW, यह समझना मुश्किल है और निष्पादित करने में बहुत धीमा है। यह पदावनत नहीं है, यह सिर्फ अन्य तरीके हैं बेहतर :) – vava
वहाँ कोई कारण यह धीमी होने के लिए है: RTTI वर्ग vtable में संग्रहित किया जा सकता है, एक आभासी समारोह सूचक है बस के रूप में। मुझे यकीन नहीं है कि यह समझना मुश्किल क्यों है, या तो, आरटीटीआई की जांच करने के तरीके में अधिक स्थानीय है: उदाहरण के लिए यदि आप देखते हैं कि "अगर (फू फू है)" तो आप जानते हैं कि क्या जा रहा है, बिना परिभाषाओं को देखे और देखे कई subclasses में आभासी कार्यों के। – ChrisW