2013-03-14 6 views
5

मैं virtual और sealed कीवर्ड की परिभाषा पता है, लेकिन अगर आप एक विधि के साथ उनमें से किसी का भी उपयोग नहीं करते हैं, विधि डिफ़ॉल्ट रूप से ओवरराइड किया जा सकता?क्या सी # विधि सीलबंद या आभासी डिफ़ॉल्ट रूप से है?

मैं vb.net पृष्ठभूमि से आ रहा हूं। यह (MSDN से) vb.net में इस प्रकार है:

overridable या NotOverridable संशोधक निर्धारित नहीं है तो, डिफ़ॉल्ट सेटिंग संपत्ति या विधि एक आधार वर्ग संपत्ति या विधि ओवरराइड करता है, इस पर निर्भर करता है। यदि संपत्ति या विधि बेस क्लास प्रॉपर्टी या विधि को ओवरराइड करती है, तो डिफ़ॉल्ट सेटिंग अतिसंवेदनशील है; अन्यथा, यह अतिव्यापी नहीं है।

मैं सिर्फ यह जानना चाहता हूं कि यह सी # में भी सच है या नहीं।

+8

सबसे तेज़ तरीका यह है कि आप स्वयं को जांच सकें, यह जांचने के लिए कोड की लगभग 10 लाइनों से अधिक नहीं है। – Zipper

उत्तर

5

नहीं इस पर

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

क्या आप फिर भी क्या कर सकते हैं, नई कीवर्ड का उपयोग करके एक विधि को छिपाने के लिए है। (MSDN प्रलेखन)

सील कीवर्ड दोनों वर्ग परिभाषाएँ और तरीकों पर प्रयोग किया जाता है। यह किसी वर्ग से उत्तराधिकारी या किसी विधि के ओवरराइडिंग को अस्वीकार करता है। डिफ़ॉल्ट रूप से, यदि आप इस कीवर्ड का उपयोग नहीं करते हैं, तो अन्य आपकी कक्षा से प्राप्त करने में सक्षम होंगे। (MSDN Documentation)

+0

नोट 'मुहरबंद' विधियों के साथ-साथ कक्षाओं पर भी लागू होता है। आप अपने आप को ओवरराइड करने से उपप्रकारों को रोकने के लिए वर्चुअल विधि को सील कर सकते हैं। – Servy

+0

@ सर्वी और इसलिए मैंने कुछ नया सीखा। धन्यवाद! –

+0

बस यह जोड़ने के लिए कि 'नया' कीवर्ड व्युत्पन्न वर्ग में किसी विधि के लिए निहित है जो बेस क्लास में वर्चुअल या गैर वर्चुअल विधि के रूप में मौजूद है। व्युत्पन्न वर्ग में विधि की घोषणा में 'नए' कीवर्ड का स्पष्ट रूप से उल्लेख करने से प्रोग्रामर को इस इरादे को समझने में मदद मिलती है कि - 'जिस विधि को आप देख रहे हैं वह विरासत कॉल पदानुक्रम में भाग लेने में रूचि नहीं रखता है।' – RBT

6

सी # में डिफ़ॉल्ट तरीकों से नहीं आभासी है।

2

सं जावा के विपरीत, सी # तरीकों में virtual डिफ़ॉल्ट रूप से नहीं कर रहे हैं। वे न तो sealed हैं, लेकिन आप उन्हें ओवरराइड नहीं कर सकते हैं, क्योंकि वे सामान्य तरीके हैं।

2

नहीं, आप एक गैर आभासी विधि ओवरराइड नहीं कर सकते। नया कीवर्ड केवल बेस क्लास कार्यान्वयन को छुपाता है और यह एक अच्छा अभ्यास नहीं है। साथ एंडर्स हेल्स्बर्ग here

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