MyClass
, एक संकलक के नजरिए से, एक call
अनुदेश के पक्ष में एक callvirt
अनुदेश छोड़ एक तरीका है। अनिवार्य रूप से जब आप आभासी अर्थशास्त्र (callvirt
) के साथ एक विधि को कॉल करते हैं, तो आप संकेत दे रहे हैं कि आप सबसे व्युत्पन्न विविधता का उपयोग करना चाहते हैं। ऐसे मामलों में जहां आप व्युत्पन्न विविधताओं को छोड़ना चाहते हैं, आप MyClass
(call
) का उपयोग करते हैं। जबकि आपने कहा है कि आप मूल अवधारणा को समझते हैं, मुझे लगा कि यह एक अंतर्निहित समझ के बजाय, एक कार्यात्मक दृष्टिकोण से इसका वर्णन करने में मदद कर सकता है। यह MyBase
के साथ MyBase
के साथ सक्रिय प्रकार के बजाय MyBase
के साथ आधार प्रकार के दायरे के साथ MyBase
के समान रूप से समान है।
पदानुक्रम में वर्तमान बिंदु पर वर्चुअल कॉल सेमेन्टिक्स को ओवरराइड करना आम तौर पर एक खराब डिज़ाइन विकल्प होता है, केवल एक बार यह वैध होता है जब आपको अपने ऑब्जेक्ट के पदानुक्रम के भीतर कार्यक्षमता के एक विशिष्ट टुकड़े पर भरोसा करना चाहिए, और नहीं उनके कार्यान्वयन में आधार आमंत्रण के माध्यम से अपनी विविधता को कॉल करने के लिए उत्तराधिकारी पर भरोसा करें। यह एक डिजाइनर के रूप में भी आप पर भरोसा कर सकता है कि यह एकमात्र विकल्प है क्योंकि आप ऑब्जेक्ट पदानुक्रम में कार्यक्षमता को आगे बढ़ाते हैं और आपको यह सुनिश्चित करना होगा कि इस कोने के मामले में विरासत वृक्ष के वर्तमान स्तर पर यह विशिष्ट विधि होनी चाहिए बुलाया।
यह डिजाइन के बारे में सब कुछ है, समग्र डिजाइन और कोने के मामलों को समझना। संभावना है किमें ऐसी कार्यक्षमता शामिल नहीं है क्योंकि उन कोने के मामलों पर आप पदानुक्रम के आविष्कार में वर्तमान स्तर को एक निजी विविधता में अलग कर सकते हैं, और आवश्यक होने पर केवल उस निजी कार्यान्वयन को देखें।यह मेरा व्यक्तिगत विचार है कि सेगमेंटेशन दृष्टिकोण का उपयोग करना एक आदर्श माध्यम है क्योंकि यह आपकी डिज़ाइन पसंद के बारे में स्पष्ट है, और इसका पालन करना आसान है (और यह भी मान्य का अर्थ है MyClass
के कार्यात्मक समकक्ष के बिना भाषाओं में।)
स्रोत
2013-09-29 15:58:38
मेरे 5 साल पुराने प्रश्न का उत्तर देने के लिए धन्यवाद :) मुझे लगता है कि "खराब डिजाइन पसंद" जवाब है; निजी मुहरबंद/सार्वजनिक आभासी बहुत बेहतर लगता है। –
@RobertTaylor: खुशी है कि मैं मदद कर सकता हूं। मैं एक स्पष्ट उत्तर की कमी पर हैरान था, इसलिए मुझे लगा कि मैं इसे संकलक लेखक के परिप्रेक्ष्य से उत्तर दूंगा। मैं अभी भी खुद को सीख रहा हूं, लेकिन इसका मतलब यह नहीं है कि मुझे पता है कि थोड़ा सा उपयोगी नहीं है। –