2010-11-25 6 views
6

मैं सोच रहा था क्यों सी # private virtual कार्यों की अनुमति है और जिसे उपयुक्त Why are private virtual methods illegal in C#?निजी तौर पर सी ++ और सी # में अलग-अलग चीजें हैं?

नामित भर में भाग गया स्वीकार किए जाते हैं जवाब Eric Lippert में नहीं है (जो शायद जानता है कि वह क्या बारे में बात कर रहा है ...) ने कहा:

हैं आप गैर-नेस्टेड व्युत्पन्न कक्षाओं में विधि को ओवरराइड करने की क्षमता को प्रतिबंधित करना चाहते हैं, तो आप बेस क्लास से प्राप्त करने के लिए गैर-नेस्टेड कक्षाओं की क्षमता को प्रतिबंधित करके ऐसा कर सकते हैं; क्योंकि इसका मतलब "मैं इस समारोह की कार्यक्षमता ओवरराइड करने के लिए मुझ से व्युत्पन्न वर्ग चाहते हैं, लेकिन वे इसे सीधे कॉल करने के लिए सक्षम नहीं होना चाहिए", दूसरे शब्दों में

C++ में private: virtual समझ में आता है private नियंत्रण जो कर सकते हैं एक फ़ंक्शन को कॉल करें और इसका कोई प्रभाव नहीं पड़ता कि इसे ओवरराइड कौन कर सकता है।

मुझे लगता है कि के बाद से ही व्युत्पन्न वर्ग पहली जगह में और के बाद से ओवरराइड कर सकते हैं सी # private virtual कार्यों पर प्रतिबंध लगाता है इस सवाल का कोई मतलब नहीं हो सकता है, वहाँ अन्य स्थितियों जिसमें एक समारोह के संरक्षण के स्तर को प्रभावित कर सकता है जो इसे ओवरराइड कर सकते हैं कर रहे हैं (protected internal शायद)?

उत्तर

7

ऐसा लगता है कि आप सी ++ दुनिया को ओवरराइड करने में सक्षम होने की इच्छा रखते हैं लेकिन कॉल नहीं करते हैं; तो नहीं: आप इसे सी # में नहीं कर सकते हैं। के आसपास अन्य तरीका ठीक है, हालांकि - इसे पहले स्थान पर virtual चिह्नित न करें, या को चिह्नित करें यदि यह पहले से हीvirtual है।

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