2008-12-04 11 views

उत्तर

12

"नया" का अर्थ है कि सीएलआर के संबंध में आपके पास दो पूरी तरह से अलग-अलग विधियां हैं - उनके पास समान नाम होता है, लेकिन वे विरासत के मामले में असंबंधित होते हैं। इसका मतलब है कि यदि आप चलाते हैं:

Base b = new Derived(); 
Derived d = new Derived(); 
b.MyMethod(); // Calls Base.MyMethod 
d.MyMethod(); // Calls Derived.MyMethod 

यह कुछ बहुत ही समझने योग्य कोड के लिए बना सकता है।

आमतौर पर यदि आप विभिन्न विधियों को चाहते हैं, तो उन्हें अलग-अलग चीजें कहें। एक ही नाम (और हस्ताक्षर) का उपयोग करने का सामान्य कारण बेस क्लास की विधि के व्यवहार को ओवरराइड करना है। उस समय आपके पास नाम/हस्ताक्षर रखने के अलावा कोई विकल्प नहीं है।

3

मैं अभी भी काम करने का प्रयास कर रहा हूं कि डरावनी हैकर से "नया" अलग-अलग केस क्या है।

+0

वहां * आईएस * कोई उपयोग नहीं है, यह * एक और * विधि है जो "समान नाम" होती है, अवधि ... –

+3

उपयोग केस बहुत सरल है, वास्तव में। चरण हैं: 1) आप उस वर्ग से प्राप्त होते हैं जो आपके नियंत्रण में नहीं है (उदाहरण के लिए ढांचे से एक)। 2) आप Foo() नामक एक नई विधि पेश करते हैं। 3) बेस क्लास के बाद के संस्करण में फू() भी शामिल है। 4) आपको एक कंपाइलर चेतावनी मिलती है, और इसे ठीक करें। –

+3

इसे ठीक करने के विकल्प हैं: ए) विधि का नाम बदलें (हमेशा व्यवहार्य नहीं)। बी) "नया" संशोधक जोड़ें। और हाँ, यह एक बुरा स्थिति है जिसे आपको जहां भी संभव हो से बचना चाहिए - लेकिन यह अच्छा है कि सी # कम से कम आपको इससे निपटने देता है। –

0

यह वास्तव में नहीं एक पसंद आपके पास है। हालांकि बेस बेस बनाया गया है, यह आपके ऊपर लगाया गया है। यदि एक ही नाम के साथ एक विधि मौजूद है और इसे "वर्चुअल" के रूप में चिह्नित किया गया है, तो आपको ओवरराइड का उपयोग करना चाहिए जब तक कि आप सड़क पर दिखाई देने वाली कुछ गंभीर रूप से मजाकिया बग नहीं चाहते हैं जब लोग आपकी कक्षा के ऑब्जेक्ट को बेस क्लास में कास्ट करना शुरू करते हैं ...

हालांकि अगर यह विधि "आभासी" के रूप में चिह्नित नहीं है, तो एक नया तरीका बनाने का एकमात्र तरीका "नया" कीवर्ड का उपयोग करके है। ध्यान दें कि यह विधि आमंत्रणों को प्रतिस्थापित नहीं करेगा जहां संदर्भ आपकी विधि में टाइपऑफ (बेसक्लास) का है। तो यह ज्यादातर एक ही नाम और एक ही हस्ताक्षर के साथ एक नई विधि बनाने के लिए सिंटैक्टिकल चीनी है ...

हालांकि जब कोड आपके लोहे को हिट करता है तो यह कुछ भी नहीं है, फिर एक ही नाम और एक ही हस्ताक्षर के साथ एक पूरी तरह से अलग विधि है। जहां एक ओवरराइड विधि हर एक फोनअपने नए विधि के आधार वर्ग विधानसभा में उन सहित ...

तो उनकी तुलना की जगह लेगा कारों और errh ... पक्षियों या कुछ और की तुलना की तरह है ..

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