यह सलाह दी जाती है कि सी # में नए कुंजी शब्द के बजाय ओवरराइड का उपयोग करें। वह नियम क्यों है?सी # में नए और ओवरराइड के बीच कैसे चुना जाए?
उत्तर
"नया" का अर्थ है कि सीएलआर के संबंध में आपके पास दो पूरी तरह से अलग-अलग विधियां हैं - उनके पास समान नाम होता है, लेकिन वे विरासत के मामले में असंबंधित होते हैं। इसका मतलब है कि यदि आप चलाते हैं:
Base b = new Derived();
Derived d = new Derived();
b.MyMethod(); // Calls Base.MyMethod
d.MyMethod(); // Calls Derived.MyMethod
यह कुछ बहुत ही समझने योग्य कोड के लिए बना सकता है।
आमतौर पर यदि आप विभिन्न विधियों को चाहते हैं, तो उन्हें अलग-अलग चीजें कहें। एक ही नाम (और हस्ताक्षर) का उपयोग करने का सामान्य कारण बेस क्लास की विधि के व्यवहार को ओवरराइड करना है। उस समय आपके पास नाम/हस्ताक्षर रखने के अलावा कोई विकल्प नहीं है।
मैं अभी भी काम करने का प्रयास कर रहा हूं कि डरावनी हैकर से "नया" अलग-अलग केस क्या है।
यह वास्तव में नहीं एक पसंद आपके पास है। हालांकि बेस बेस बनाया गया है, यह आपके ऊपर लगाया गया है। यदि एक ही नाम के साथ एक विधि मौजूद है और इसे "वर्चुअल" के रूप में चिह्नित किया गया है, तो आपको ओवरराइड का उपयोग करना चाहिए जब तक कि आप सड़क पर दिखाई देने वाली कुछ गंभीर रूप से मजाकिया बग नहीं चाहते हैं जब लोग आपकी कक्षा के ऑब्जेक्ट को बेस क्लास में कास्ट करना शुरू करते हैं ...
हालांकि अगर यह विधि "आभासी" के रूप में चिह्नित नहीं है, तो एक नया तरीका बनाने का एकमात्र तरीका "नया" कीवर्ड का उपयोग करके है। ध्यान दें कि यह विधि आमंत्रणों को प्रतिस्थापित नहीं करेगा जहां संदर्भ आपकी विधि में टाइपऑफ (बेसक्लास) का है। तो यह ज्यादातर एक ही नाम और एक ही हस्ताक्षर के साथ एक नई विधि बनाने के लिए सिंटैक्टिकल चीनी है ...
हालांकि जब कोड आपके लोहे को हिट करता है तो यह कुछ भी नहीं है, फिर एक ही नाम और एक ही हस्ताक्षर के साथ एक पूरी तरह से अलग विधि है। जहां एक ओवरराइड विधि हर एक फोनअपने नए विधि के आधार वर्ग विधानसभा में उन सहित ...
तो उनकी तुलना की जगह लेगा कारों और errh ... पक्षियों या कुछ और की तुलना की तरह है ..
- 1. नए और ओवरराइड के बीच अंतर?
- 2. आभासी, ओवरराइड, नए और सील ओवरराइड
- 3. नए + के बीच रेल में मतभेद और
- 4. सी ++ नए मिश्रण/libs के बीच हटाएं?
- 5. "Verbose शब्दकोश" सी # में, 'ओवरराइड नए' यह [] या लागू IDictionary
- 6. समय() और नए मोंगोडेट() के बीच अंतर?
- 7. सी ++ 'नए' कीवर्ड और सी
- 8. आइटम को कैसे बनाया जाए चुना गया स्वचालित रूप से पहले प्रविष्टि को नहीं चुना गया
- 9. सी # वर्चुअल और ओवरराइड के आंतरिक कार्य
- 10. रेल: ActiveRecord में बनाने और नए तरीकों के बीच अंतर?
- 11. स्मॉलटॉक में नए और प्रारंभ करने के बीच अंतर?
- 12. तालिका के बीच में नए कॉलम डालने?
- 13. सदस्य घोषणा में नए और कन्स्ट्रक्टर में नए के बीच क्या अंतर है?
- 14. फ़ाइल सिस्टम और डेटाबेस के बीच समन्वय कैसे लाया जाए?
- 15. alloc, init, और नए ऑब्जेक्टिव-सी में
- 16. सी # वर्चुअल और ओवरराइड कीवर्ड
- 17. नए अक्षरों के लिए एपीआई दस्तावेज कैसे पढ़ा जाए?
- 18. ब्लॉबबिल्डर और नए ब्लॉब कन्स्ट्रक्टर के बीच क्या अंतर है?
- 19. zeromq और bind_to_random_port - कैसे बंदरगाह चुना
- 20. ओवरराइड और गैर ओवरराइड निर्माता
- 21. लुआ में सी ++ विधि को ओवरराइड करना और इसे सी ++
- 22. सी में स्थिर और सी ++ में स्थिर के बीच अंतर ??
- 23. Django - सहेजने के तरीके को ओवरराइड करते समय पुराने और नए मूल्य के बीच दुविधा की जांच करें
- 24. फ़ंक्शन और नए फ़ंक्शन के बीच जावास्क्रिप्ट अंतर
- 25. डेटा और नए प्रकार के बीच आलस्य/कठोरता
- 26. सीएसएस में लाइनों के बीच अंतर को कैसे बढ़ाया जाए?
- 27. टेक्स्टव्यू में लाइनों के बीच अंतर को कैसे बढ़ाया जाए।
- 28. iframe सीएसएस नए ट्विटर विजेट के लिए ओवरराइड
- 29. नए ऑपरेटर और क्लास.न्यू इंस्टेंस() के बीच क्या अंतर है?
- 30. निर्माण और नए के बीच क्या अंतर है?
वहां * आईएस * कोई उपयोग नहीं है, यह * एक और * विधि है जो "समान नाम" होती है, अवधि ... –
उपयोग केस बहुत सरल है, वास्तव में। चरण हैं: 1) आप उस वर्ग से प्राप्त होते हैं जो आपके नियंत्रण में नहीं है (उदाहरण के लिए ढांचे से एक)। 2) आप Foo() नामक एक नई विधि पेश करते हैं। 3) बेस क्लास के बाद के संस्करण में फू() भी शामिल है। 4) आपको एक कंपाइलर चेतावनी मिलती है, और इसे ठीक करें। –
इसे ठीक करने के विकल्प हैं: ए) विधि का नाम बदलें (हमेशा व्यवहार्य नहीं)। बी) "नया" संशोधक जोड़ें। और हाँ, यह एक बुरा स्थिति है जिसे आपको जहां भी संभव हो से बचना चाहिए - लेकिन यह अच्छा है कि सी # कम से कम आपको इससे निपटने देता है। –