मुझे आश्चर्य है कि यहां ऐसी सहमति बनती दिख रही है कि गैर-वर्चुअल-बाय-डिफ़ॉल्ट चीजें करने का सही तरीका है। मैं दूसरे पर उतरने जा रहा हूं - मुझे लगता है कि व्यावहारिक - बाड़ की तरफ।
अधिकांश औचित्य मेरे लिए पुराने की तरह पढ़ते हैं "यदि हम आपको शक्ति देते हैं तो आप स्वयं को चोट पहुंचा सकते हैं" तर्क। प्रोग्रामर से ?!
यह मुझे ऐसा लगता है जैसे कोडर जो पर्याप्त नहीं जानता था (या उसके पास पर्याप्त समय है) विरासत के लिए अपनी लाइब्रेरी को डिजाइन करने के लिए और / या एक्स्टेंसिबिलिटी कोडर है जो वास्तव में लाइब्रेरी का निर्माण करता है मुझे ठीक करने या ट्वीक करने की संभावना है - बिल्कुल पुस्तकालय जहां ओवरराइड करने की क्षमता सबसे उपयोगी होगी।
जितनी बार मुझे बदसूरत लिखना पड़ा है, उतने ही हताश काम-कोड के बारे में (या उपयोग को छोड़ना और अपना वैकल्पिक समाधान रोल करना है) क्योंकि मैं अब तक ओवरराइड नहीं कर सकता, मैंने जितनी बार काट ली है, उतनी बार आउटवेग करता है ( जावा में जैसे) ओवरराइड करके जहाँ डिज़ाइनर ने शायद नहीं माना होगा।
गैर-आभासी-बाय-डिफॉल्ट मेरे जीवन को कठिन बना देता है।
अपडेट करें: यह बताया गया है [काफी सही ढंग से] कि मैं वास्तव में इस सवाल का जवाब नहीं दिया। इसलिए - और देर से होने के लिए माफी के साथ ...।
मुझे लगता है कि थोड़े-थोड़े लिखने में सक्षम होना चाहता था जैसे "सी # लागू करने के तरीके गैर-आभासी के रूप में डिफ़ॉल्ट रूप से क्योंकि एक बुरा निर्णय किया गया था जो प्रोग्रामर की तुलना में अधिक मूल्यवान प्रोग्राम"। (मुझे लगता है कि इस सवाल के कुछ अन्य उत्तरों के आधार पर कुछ हद तक उचित ठहराया जा सकता है - जैसे प्रदर्शन (समय से पहले अनुकूलन, किसी को?), या कक्षाओं के व्यवहार की गारंटी।)
हालांकि, मुझे लगता है कि मैं सिर्फ अपनी राय बता रहा हूं और यह निश्चित जवाब नहीं है कि स्टैक ओवरफ्लो इच्छाएं हैं। निश्चित रूप से, मैंने सोचा, उच्चतम स्तर पर निश्चित (लेकिन अप्रभावी) उत्तर है:
वे डिफ़ॉल्ट रूप से गैर-आभासी हैं क्योंकि भाषा-डिजाइनरों के पास बनाने का निर्णय था और यही उन्होंने चुना।
अब मैं सटीक कारण का अनुमान लगाता हूं कि उन्होंने यह निर्णय लिया था कि हम कभी नहीं करेंगे .... ओह, रुको! एक वार्तालाप की प्रतिलेख!
इसलिए ऐसा लगता है कि एपीआई के ओवरराइडिंग के खतरों के बारे में यहां जवाब और टिप्पणियां और उत्तराधिकार के लिए स्पष्ट रूप से डिजाइन करने की आवश्यकता सही रास्ते पर है, लेकिन सभी एक महत्वपूर्ण अस्थायी पहलू याद कर रहे हैं: एंडर्स की मुख्य चिंता एक वर्ग या एपीआई के निहित को बनाए रखने के बारे में थी। अनुबंध संस्करणों में । और मुझे लगता है कि वह वास्तव में .Net / C # प्लेटफॉर्म को कोड के तहत बदलने की अनुमति देने के बारे में अधिक चिंतित है, बजाय प्लेटफॉर्म के शीर्ष पर उपयोगकर्ता-कोड बदलने के बारे में चिंतित होने के। (और उसका "व्यावहारिक" दृष्टिकोण मेरा बिल्कुल विपरीत है क्योंकि वह दूसरी तरफ से देख रहा है।)
(लेकिन क्या वे वर्चुअल-बाय-डिफॉल्ट उठा सकते हैं और फिर कोडबेस के माध्यम से "फाइनल" पेप्पर्ड कर सकते हैं; शायद यह बिल्कुल समान नहीं है .. और एंडर्स स्पष्ट रूप से मुझसे ज्यादा स्मार्ट हैं इसलिए मैं इसे झूठ बोलने जा रहा हूं। "
this
संदर्भ के अशक्त होने पर अलग तरह से व्यवहार करता हो । अधिक जानकारी के लिए यहां देखें ।