मेरे पास एक कक्षा है जिसे मैंने आंतरिक के रूप में चिह्नित किया है और मैंने फ़ील्ड और विधियों को सार्वजनिक रूप से चिह्नित किया है। यह त्रुटियों या चेतावनियों के बिना संकलित। क्या सार्वजनिक और कक्षा के रूप में विधियों के रूप में विधियों की कोई विशिष्ट आवश्यकता है (सिवाय इसके कि जब उन्हें इंटरफेस या कक्षाओं से लागू किया जा रहा हो)?सी # आंतरिक होने पर विधियों/सदस्यों को सार्वजनिक होने की अनुमति क्यों देता है
उत्तर
इसका कोई प्रतिकूल प्रभाव नहीं पड़ता है, और इसका मतलब यह भी है कि यदि आप कभी भी सार्वजनिक प्रकार बनाने का निर्णय लेते हैं, तो आपको अपने सदस्यों की पहुंच को बदलने की आवश्यकता नहीं होगी।
मूल रूप से एक सदस्य के लिए:
सार्वजनिक का मतलब सदस्य जो कोई प्रकार देख सकते हैं करने के लिए दिख रहा है।
आंतरिक माध्यम सदस्य केवल मौजूदा असेंबली में दिखाई देता है, भले ही प्रकार सार्वजनिक रूप से दिखाई दे।
तो आपकी पसंद इस पर आधारित होगी कि इनमें से कौन सा सबसे उपयुक्त है। आम तौर पर सदस्यों को सार्वजनिक बनाने के लिए सबसे उपयुक्त है (यानी किसी भी व्यक्ति को जो दृश्य देख सकता है, यानी टाइप के सार्वजनिक एपीआई का हिस्सा)। आप सदस्यों को सार्वजनिक कक्षा में आंतरिक बनाने के लिए आंतरिक कारण बनाते हैं - आम तौर पर सहायक सदस्य जो केवल एक ही असेंबली में "मित्र" वर्गों के लिए दृश्यमान होना चाहिए, और सार्वजनिक एपीआई का हिस्सा नहीं बनना चाहिए।
इसके अतिरिक्त, एक आंतरिक प्रकार सार्वजनिक प्रकार से प्राप्त हो सकता है, इसलिए सार्वजनिक सदस्यों को उत्तराधिकारी और ओवरराइड कर सकते हैं। क्या यह ओवरराइड सार्वजनिक सदस्यों को अनुमति देने के लिए समझ में आता है, लेकिन नए सार्वजनिक सदस्य नहीं?
अच्छा स्पष्टीकरण जो, क्या कोई अन्य उपयोग है (अलग "एफ आप कभी भी सार्वजनिक प्रकार बनाने का फैसला करते हैं, आपको अपने सदस्यों की पहुंच को बदलने की आवश्यकता नहीं होगी।") विधियों को सार्वजनिक करने और आंतरिक टाइप करने के लिए? – Ravisha
"क्या कोई अन्य उपयोग है" - इसमें कोई फर्क नहीं पड़ता है। इसलिए मैं आम तौर पर सदस्यों को सार्वजनिक बना देता हूं जब तक उन्हें आंतरिक बनाने का कोई स्पष्ट कारण न हो, यानी जब तक वे सार्वजनिक प्रकार के लिए आंतरिक नहीं होते (आमतौर पर सहायक सदस्य जो सार्वजनिक एपीआई में दिखाई नहीं दे सकते हैं, लेकिन "मित्र" वर्गों तक पहुंच योग्य नहीं हैं एक ही विधानसभा में। – Joe
सार्वजनिक विधियों के साथ आंतरिक के रूप में चिह्नित एक वर्ग अन्य वर्गों के लिए उन तरीकों का संदर्भ देने के लिए समान रूप से अनुमति देगा।
आंतरिक उपयोग की एक सामान्य उपयोग घटक आधारित विकास में है, क्योंकि यह सक्षम बनाता है के घटकों के एक समूह बिना एक निजी ढंग से सहयोग आवेदन के बाकी के संपर्क में किया जा रहा कोड। उदाहरण के लिए, ग्राफ़िकल उपयोगकर्ता इंटरफेस बनाने के लिए ढांचे नियंत्रण और फॉर्म क्लास प्रदान कर सकते हैं जो आंतरिक पहुंच वाले सदस्यों का उपयोग करके सहयोग करते हैं। चूंकि ये सदस्य आंतरिक हैं, वे ढांचे का उपयोग कर रहे कोड से अवगत नहीं हैं।
यह किसी प्रकार या को के बाहर आंतरिक पहुंच वाले सदस्य के संदर्भ में एक त्रुटि है जिसमें यह परिभाषित किया गया था।
संपादित
से Scope of internal method in C#?
आप किसी सार्वजनिक वर्ग जो विधानसभा में अन्य वर्गों द्वारा कहा जा सकता है पर एक विधि चाहते हैं, लेकिन की ग्राहकों द्वारा नहीं सभा।
सहमत हुए। फिर भी अगर मैं विधि को आंतरिक के रूप में चिह्नित करता हूं तो मैं इसे असेंबली के अंदर संदर्भित करने में सक्षम हूं। !! – Ravisha
कोई चेतावनी नहीं है क्योंकि इसका कोई प्रतिकूल प्रभाव नहीं पड़ता है। सदस्यों को वैसे भी अन्य असेंबली से सुलभ नहीं किया जाएगा, भले ही आप उन्हें सार्वजनिक या आंतरिक के रूप में चिह्नित करें।
इस मामले पर विचार करें:
आप एक FooFactory IFoo को लागू करने की वस्तुओं का निर्माण किया है। आपका IFoo कार्यान्वयन आंतरिक हो सकता है क्योंकि आप उन्हें अन्य असेंबली में बेनकाब नहीं करना चाहते हैं जो केवल IFoo का उपयोग करें। IFoo कार्यान्वयन के सदस्य सार्वजनिक होना चाहिए ताकि उन्हें अन्य असेंबली में उपयोग किया जा सके।
इसलिए, जैसा कि मैंने अब आपके सभी प्रश्नों को पढ़ा है, मुझे नहीं लगता कि आंतरिक वर्गों पर विधियों के लिए सार्वजनिक होने के तरीकों के लिए कोई कारण नहीं है जब तक कि उन वर्गों को इंटरफेस के माध्यम से अन्य विधानसभाओं से एक्सेस नहीं किया जाता है या आधार वर्ग
- 1. सर्वर को रीबूट होने पर मेरी tempdb रीसेट अनुमति क्यों देता है?
- 2. क्यों JSON केवल स्ट्रिंग की कुंजी को अनुमति देता है?
- 3. Postgresql क्वेरी अनुकूलन कोई आंतरिक/बाहरी अनुमति शामिल होने
- 4. अप्रबंधित डीबगिंग सक्षम होने पर परिवर्तन की अनुमति नहीं है?
- 5. क्यों संकलक रूपांतरण को संकुचित करने की अनुमति देता है
- 6. हाइबरनेट एक एम्बेडेड ऑब्जेक्ट को इंट फ़ील्ड के साथ शून्य होने की अनुमति नहीं देता है?
- 7. सी # एक ही पंक्ति पर स्थिरांक और स्थिर की अनुमति क्यों नहीं देता है?
- 8. सीपी नहीं होने पर shutil.copy() एक अनुमति अपवाद क्यों उठाएगा?
- 9. डुप्लिकेट की अनुमति नहीं होने पर MySQL एकाधिक डालें।
- 10. Windows FIPS अनुपालन नीति सक्षम होने पर .NET "प्रबंधित" क्रिप्टोग्राफ़ी कक्षाओं की अनुमति क्यों नहीं है?
- 11. Android API सार्वजनिक रूप से इनकमिंग एसएमएस सुनने की अनुमति क्यों नहीं देता है?
- 12. सी ++ इस दृष्टिकोण का उपयोग करके निजी सदस्यों को संशोधित करने की अनुमति क्यों देता है?
- 13. IntelliJ निरंतर परिचय निजी होने की जरूरत नहीं सार्वजनिक
- 14. डिलीट ऑपरेटर को स्थिर होने की आवश्यकता क्यों है?
- 15. क्या एचटीएमएल में कई शीर्षक टैग होने की अनुमति है?
- 16. रेगेक्स सत्यापनकर्ता इनपुट के रूप में खाली होने की अनुमति देता है
- 17. क्या हास्केल प्रकार सिस्टम जादू शामिल होने की परिभाषा के लिए अनुमति देता है?
- 18. संग्रह क्यों शून्य होने पर .NET foreach loop NullRefException को फेंक देता है?
- 19. ऐप अपडेट स्थापित होने पर सभी सेटिंग्स खो देता है
- 20. डबल यूआरएल एनकोडेड अनुरोध पथ मान्य होने की अनुमति दें
- 21. सी ++ एक स्ट्रिंग को एक पूर्णांक को असाइन करने की अनुमति क्यों देता है?
- 22. क्यों एएसपी.नेट एमवीसी को डिफ़ॉल्ट.एएसपीएक्स फाइल होने की परेशानी है?
- 23. प्रभाव = ड्रैगड्रॉपफ्रैक्ट्स सेट होने पर भी ड्रॉप अनुमति क्यों है? कोई सेट है?
- 24. पैरामीटरेटेड थ्रेडस्टार्ट केवल ऑब्जेक्ट पैरामीटर की अनुमति क्यों देता है?
- 25. ऑटोलायआउट होने पर 2 स्टोरीबोर्ड क्यों हैं?
- 26. आंतरिक HTML पूर्ण होने पर कैसे पता लगाया जाए
- 27. केवल सी ++ में परिभाषित व्यवहार की अनुमति देता है?
- 28. आंतरिक स्टोरेज में सार्वजनिक फ़ाइलों को सहेजना
- 29. आंतरिक शामिल होने और बाहरी एसक्यूएल स्टेटमेंट्स में शामिल होने की तुलना करें
- 30. कंटेनर div क्यों आईएमजी या एसवीजी सामग्री से थोड़ा बड़ा होने पर जोर देता है?
शायद कोई साइड इफेक्ट नहीं है इसलिए यह जांचना आवश्यक नहीं होगा। –
हां मैं सहमत हूं कि साइड इफेक्ट नहीं है, लेकिन मेरा सवाल यह था कि क्या कोई विशिष्ट उपयोग है जिसमें यह उपयोगी हो जाता है। – Ravisha