अद्यतन: यह सवाल सितंबर 2014 में मेरे ब्लॉग का विषय था । महान प्रश्न के लिए धन्यवाद!
कंपाइलर टीम के भीतर भी इस सवाल पर काफी बहस हुई है।
सबसे पहले, नियमों को समझना बुद्धिमानी है। एक वर्ग या संरचना का एक सार्वजनिक सदस्य एक ऐसा सदस्य है जो किसी भी चीज के लिए सुलभ है जो युक्त प्रकार तक पहुंच सकता है । तो एक आंतरिक वर्ग का एक सार्वजनिक सदस्य प्रभावी रूप से आंतरिक है।
तो अब, एक आंतरिक वर्ग को देखते हुए, क्या इसके सदस्य जिन्हें आप विधानसभा में पहुंचना चाहते हैं, उन्हें सार्वजनिक या आंतरिक के रूप में चिह्नित किया जाना चाहिए?
मेरी राय है: ऐसे सदस्यों को सार्वजनिक रूप से चिह्नित करें।
मैं "जनता" का उपयोग करने का मतलब है "यह सदस्य कार्यान्वयन विवरण नहीं है"। एक संरक्षित सदस्य एक कार्यान्वयन विवरण है; इसके बारे में कुछ ऐसा है जो एक व्युत्पन्न वर्ग का काम करने के लिए आवश्यक है। एक आंतरिक सदस्य एक कार्यान्वयन विवरण है; इस विधानसभा में आंतरिक रूप से कुछ और सही ढंग से काम करने के लिए सदस्य की आवश्यकता है। एक सार्वजनिक सदस्य कहता है "यह सदस्य इस वस्तु द्वारा प्रदान की गई महत्वपूर्ण, प्रलेखित कार्यक्षमता का प्रतिनिधित्व करता है।"
मूल रूप से, मेरा दृष्टिकोण है: मान लीजिए कि मैंने इस आंतरिक वर्ग को एक सार्वजनिक वर्ग में बनाने का फैसला किया। ऐसा करने के लिए, मैं बिल्कुल एक चीज बदलना चाहता हूं : कक्षा की पहुंच। यदि एक आंतरिक वर्ग को सार्वजनिक वर्ग में बदलने का अर्थ है कि मुझे एक आंतरिक सदस्य को भी सार्वजनिक सदस्य में बदलना है, तो वह सदस्य वर्ग के सार्वजनिक सतह क्षेत्र का हिस्सा था , और इसे पहली जगह में सार्वजनिक होना चाहिए था।
अन्य लोग असहमत हैं। एक आकस्मिक बात है जो कहती है कि वे किसी सदस्य की घोषणा पर नज़र रखना चाहते हैं और तुरंत जानते हैं कि क्या यह केवल आंतरिक कोड से कहा जाने वाला है।
दुर्भाग्य से, यह हमेशा अच्छी तरह से काम नहीं करता है; उदाहरण के लिए, एक आंतरिक वर्ग जो एक आंतरिक इंटरफ़ेस को लागू करता है, को अभी भी कार्यान्वयन करने वाले सदस्यों को सार्वजनिक रूप से चिह्नित करना होगा, क्योंकि वे वर्ग की सार्वजनिक सतह का हिस्सा हैं ।