2011-09-24 20 views
6

मेरे पास एक बेस क्लास है जिसे मैं सभी विरासत वर्गों के तरीकों के लिए कुछ 'आधार' कार्यक्षमता प्रदान करना चाहता हूं।नए और ओवरराइड के बीच अंतर?

मेरी इनहेरीट कक्षाओं में मैं क्या करना चाहते हैं:

public override void Setup() 
{ 
    base.Setup(); 
} 

लेकिन इस समय यह कहता है कि मैं नए कीवर्ड का उपयोग करने के लिए है।

मेरे पास यह कैसे है इसलिए मुझे override कीवर्ड का उपयोग करना होगा?

वहाँ कैसे यह मेरे new कीवर्ड का उपयोग और override उपयोग करने के साथ वर्तमान में है के बीच कोई अंतर है?

+3

http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier

+1

[सी # कीवर्ड उपयोग वर्चुअल + ओवरराइड बनाम नया] के संभावित डुप्लिकेट (http: // stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier

+0

धन्यवाद कि यह एक महान लिंक – Blankman

उत्तर

7

ऐसा इसलिए कहता है क्योंकि आपने बेस विधि virtual घोषित नहीं किया है। एक बार ऐसा करने के बाद, आधार virtual/व्युत्पन्न override कीवर्ड की जोड़ी समझ में आ जाएगी। अभी, संकलक शिकायत कर रहा है कि आप override गैर-virtual विधि नहीं कर सकते हैं।

+3

था ... और केवल 'आभासी' विधियों को ओवरराइड किया जा सकता है। –

4

जब आप ओवरराइड कीवर्ड का उपयोग करते हैं तो व्युत्पन्न विधि का उपयोग तब भी किया जाता है जब इंस्टेंस को बेस क्लास प्रकार के रूप में पास किया जाता है। इसलिए बेस क्लास में वर्चुअल होने की आवश्यकता है ताकि प्रोग्राम जानता है कि इसे रनटाइम चेक करना है कि वास्तविक प्रकार का उदाहरण क्या है। यह तब देखता है कि वास्तविक प्रकार क्या है और यदि यह व्युत्पन्न प्रकार है तो यह जांचता है कि क्या वे बेस क्लास में उस विशेष विधि के लिए व्युत्पन्न कक्षा में ओवरराइड हैं।

सदस्य छिपाना अलग है। बेस सदस्य केवल छुपाया जाएगा यदि इसे वास्तव में व्युत्पन्न वर्ग के उदाहरण के रूप में पारित किया जाता है। यदि वस्तु को बेस क्लास के रूप में पास किया जाता है, तो बेस क्लास विधि का उपयोग अभी भी किया जाएगा। यदि आप सदस्य को छुपाते हैं, तो आपको चेतावनी मिलती है यदि आपने नए कीवर्ड का उपयोग नहीं किया है। नया कीवर्ड केवल शिकायतकर्ता को बताने के लिए है, कि आप वास्तव में आधार प्रकार विधि को छिपाने का मतलब रखते हैं।

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