2010-03-25 12 views
5

निम्नलिखित मानें: हमारे पास कक्षा बी है, जो वर्ग ए के अंदर घिरा हुआ एक निजी वर्ग है। कक्षा बी से विरासत में कोई भी वर्ग विरासत नहीं है। प्रश्न यह है: क्या संकलक स्वचालित रूप से कक्षा बी को मुहरबंद के रूप में चिह्नित करेगा? (वीबी में nonInheritable)। क्या संकलक के लिए कोई अच्छा कारण नहीं है कि कक्षा बी को मुहरबंद के रूप में चिह्नित न करें?निजी कक्षाओं को संकलन पर सील कर रहे हैं?

मेरी विचार की रेखा यह है: चूंकि कक्षा बी कक्षा ए के अंदर घोंसला है और निजी बी है, और कक्षा बी से विरासत में कोई अन्य वर्ग नहीं है, इसे सुरक्षित करना सुरक्षित होना चाहिए, क्योंकि इसे बाहर विरासत में नहीं लिया जा सकता है कक्षा ए (ए के उप-वर्गों द्वारा भी नहीं)।

Class A 
    Private Class B 
    End Class 
End Class 

उत्तर

7

कंपाइलर स्वचालित रूप से इस प्रकार को सीलबंद के रूप में चिह्नित नहीं करेगा।

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

  • प्रकार आंशिक वर्गों
  • अन्य निजी नेस्टेड प्रकार के वारिस सकता है की उपस्थिति पर विचार करना चाहिए निजी
  • है।

ये गणना करना असंभव नहीं है लेकिन यह भी छोटा नहीं है। उपयोगकर्ता को खुद को टाइप करने के लिए बहुत सस्ता है

1

मैंने जांच नहीं की, लेकिन मुझे लगता है कि यह ऐसा नहीं करेगा। किसी भी तरह से, जेआईटी यह निर्धारित कर सकता है कि कक्षा में वंशज हो सकते हैं या नहीं, ताकि मुझे रनटाइम पर कोई अंतर न हो।

+0

जेआईटी निर्धारित कर सकता है कि कक्षा में वंशज हैं या नहीं, लेकिन मुझे विश्वास नहीं है कि यह एक प्रकार पर मुहरबंद बिट की उपस्थिति से बाहर है। मेरे पास इस पर मुझे वापस करने के लिए कोई संदर्भ नहीं है लेकिन मैं इस बिंदु पर काफी निश्चित हूं। – JaredPar

+0

@ जेरेडपायर, जहां तक ​​मुझे पता है कि कई जावा वीएम लंबे समय से ऐसा कर रहे हैं (जो डिफ़ॉल्ट-वर्चुअल-विधि के कारण वास्तव में आवश्यक है - http://www.ibm.com/developerworks/library/j- jtp12214 /), और मुझे पूरा यकीन है कि एमएस ऐसा अनुकूलन करता है अगर उन्हें प्रदर्शन में मदद के रूप में देखा गया हो। – Lucero

+0

@ लुसेरो जेआईटी निश्चित रूप से सीलबंद कक्षाओं के लिए करता है। लेकिन मामलों में केवल एक बहुत ही छोटा सबसेट है जहां यह गैर-मुहरबंद वर्गों के लिए ऐसा कर सकता है। मुझे यकीन नहीं है कि क्या माइक्रो-ऑप्टिमाइज़ेशन इसके लायक होगा। लेकिन जैसे मैंने कहा, मुझे किसी भी दस्तावेज़ को एक या दूसरे तरीके से नहीं मिल रहा है। – JaredPar

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