मूल विचार यह है कि एक "फ़ील्ड" (उदाहरण-स्तरीय चर) जिसे संरक्षित घोषित किया गया है, संभवतः यह अधिक दृश्यमान है जितना कि यह होना चाहिए, और इससे कम "संरक्षित" आप की तरह हो सकता है। C / C ++ / Java / C # में कोई एक्सेस मोडिफायर नहीं है, जो "एक ही असेंबली के भीतर केवल बाल कक्षाओं द्वारा सुलभ" के बराबर है, इस प्रकार आपको अपने स्वयं के बच्चों को परिभाषित करने की क्षमता प्रदान करता है जो आपके असेंबली में फ़ील्ड का उपयोग कर सकते हैं, लेकिन अन्य विधानसभाओं में बनाए गए बच्चों को समान पहुंच की अनुमति नहीं देना; C # में आंतरिक और संरक्षित संशोधक हैं, लेकिन उनका संयोजन "आंतरिक या संरक्षित" पहुंच बनाता है, न कि "आंतरिक और संरक्षित"। तो, एक ऐसा क्षेत्र जो संरक्षित है, किसी भी बच्चे द्वारा सुलभ है, चाहे आपने उस बच्चे को लिखा हो या किसी और ने। इस प्रकार संरक्षित एक हैकर के लिए एक खुला दरवाजा है।
इसके अलावा, उनकी परिभाषा के अनुसार क्षेत्रों में बहुत अधिक मान्यता नहीं है जो उन्हें बदलने में निहित है। C # में आप एक आसानी से बना सकते हैं, जो मूल्य प्रकारों को प्रभावी रूप से स्थिर बनाता है और संदर्भ प्रकारों को पुनर्निवेशित करने में असमर्थ (लेकिन अभी भी बहुत परिवर्तनशील) है, लेकिन यह इसके बारे में है। इस तरह, यहां तक कि संरक्षित, आपके बच्चे (जिस पर आप भरोसा नहीं कर सकते हैं) की इस क्षेत्र तक पहुंच है और इसे कुछ अमान्य कर सकते हैं, जिससे ऑब्जेक्ट की स्थिति असंगत हो जाती है (कुछ बचा जा सकता है)।
खेतों के साथ काम करने का स्वीकृत तरीका उन्हें निजी बनाना है और उन्हें एक संपत्ति, और / या एक गेट्टर और सेटर विधि के साथ एक्सेस करना है। यदि वर्ग के सभी उपभोक्ताओं को मूल्य की आवश्यकता है, तो गेटटर (कम से कम) सार्वजनिक करें। यदि केवल बच्चों को इसकी आवश्यकता है, तो गेटटर को संरक्षित करें।
एक और दृष्टिकोण जो सवाल का जवाब देता है, वह है खुद से पूछना; बाल विधि में कोड को सीधे मेरे राज्य डेटा को संशोधित करने की क्षमता की आवश्यकता क्यों है? उस कोड के बारे में वह क्या कहता है? इसके चेहरे पर "ऊर्ध्वाधर दूरी" तर्क है। यदि एक बच्चे में कोड है जो सीधे माता-पिता की स्थिति को बदलना चाहिए, तो हो सकता है कि कोड पहले स्थान पर माता-पिता का होना चाहिए?