2010-02-15 11 views
8

मेरे पास एक कक्षा है जिसे मैंने आंतरिक के रूप में चिह्नित किया है और मैंने फ़ील्ड और विधियों को सार्वजनिक रूप से चिह्नित किया है। यह त्रुटियों या चेतावनियों के बिना संकलित। क्या सार्वजनिक और कक्षा के रूप में विधियों के रूप में विधियों की कोई विशिष्ट आवश्यकता है (सिवाय इसके कि जब उन्हें इंटरफेस या कक्षाओं से लागू किया जा रहा हो)?सी # आंतरिक होने पर विधियों/सदस्यों को सार्वजनिक होने की अनुमति क्यों देता है

+0

शायद कोई साइड इफेक्ट नहीं है इसलिए यह जांचना आवश्यक नहीं होगा। –

+0

हां मैं सहमत हूं कि साइड इफेक्ट नहीं है, लेकिन मेरा सवाल यह था कि क्या कोई विशिष्ट उपयोग है जिसमें यह उपयोगी हो जाता है। – Ravisha

उत्तर

8

इसका कोई प्रतिकूल प्रभाव नहीं पड़ता है, और इसका मतलब यह भी है कि यदि आप कभी भी सार्वजनिक प्रकार बनाने का निर्णय लेते हैं, तो आपको अपने सदस्यों की पहुंच को बदलने की आवश्यकता नहीं होगी।

मूल रूप से एक सदस्य के लिए

:

  • सार्वजनिक का मतलब सदस्य जो कोई प्रकार देख सकते हैं करने के लिए दिख रहा है।

  • आंतरिक माध्यम सदस्य केवल मौजूदा असेंबली में दिखाई देता है, भले ही प्रकार सार्वजनिक रूप से दिखाई दे।

तो आपकी पसंद इस पर आधारित होगी कि इनमें से कौन सा सबसे उपयुक्त है। आम तौर पर सदस्यों को सार्वजनिक बनाने के लिए सबसे उपयुक्त है (यानी किसी भी व्यक्ति को जो दृश्य देख सकता है, यानी टाइप के सार्वजनिक एपीआई का हिस्सा)। आप सदस्यों को सार्वजनिक कक्षा में आंतरिक बनाने के लिए आंतरिक कारण बनाते हैं - आम तौर पर सहायक सदस्य जो केवल एक ही असेंबली में "मित्र" वर्गों के लिए दृश्यमान होना चाहिए, और सार्वजनिक एपीआई का हिस्सा नहीं बनना चाहिए।

इसके अतिरिक्त, एक आंतरिक प्रकार सार्वजनिक प्रकार से प्राप्त हो सकता है, इसलिए सार्वजनिक सदस्यों को उत्तराधिकारी और ओवरराइड कर सकते हैं। क्या यह ओवरराइड सार्वजनिक सदस्यों को अनुमति देने के लिए समझ में आता है, लेकिन नए सार्वजनिक सदस्य नहीं?

+0

अच्छा स्पष्टीकरण जो, क्या कोई अन्य उपयोग है (अलग "एफ आप कभी भी सार्वजनिक प्रकार बनाने का फैसला करते हैं, आपको अपने सदस्यों की पहुंच को बदलने की आवश्यकता नहीं होगी।") विधियों को सार्वजनिक करने और आंतरिक टाइप करने के लिए? – Ravisha

+0

"क्या कोई अन्य उपयोग है" - इसमें कोई फर्क नहीं पड़ता है। इसलिए मैं आम तौर पर सदस्यों को सार्वजनिक बना देता हूं जब तक उन्हें आंतरिक बनाने का कोई स्पष्ट कारण न हो, यानी जब तक वे सार्वजनिक प्रकार के लिए आंतरिक नहीं होते (आमतौर पर सहायक सदस्य जो सार्वजनिक एपीआई में दिखाई नहीं दे सकते हैं, लेकिन "मित्र" वर्गों तक पहुंच योग्य नहीं हैं एक ही विधानसभा में। – Joe

5

सार्वजनिक विधियों के साथ आंतरिक के रूप में चिह्नित एक वर्ग अन्य वर्गों के लिए उन तरीकों का संदर्भ देने के लिए समान रूप से अनुमति देगा।

internal (C# Reference)

आंतरिक उपयोग की एक सामान्य उपयोग घटक आधारित विकास में है, क्योंकि यह सक्षम बनाता है के घटकों के एक समूह बिना एक निजी ढंग से सहयोग आवेदन के बाकी के संपर्क में किया जा रहा कोड। उदाहरण के लिए, ग्राफ़िकल उपयोगकर्ता इंटरफेस बनाने के लिए ढांचे नियंत्रण और फॉर्म क्लास प्रदान कर सकते हैं जो आंतरिक पहुंच वाले सदस्यों का उपयोग करके सहयोग करते हैं। चूंकि ये सदस्य आंतरिक हैं, वे ढांचे का उपयोग कर रहे कोड से अवगत नहीं हैं।

यह किसी प्रकार या को के बाहर आंतरिक पहुंच वाले सदस्य के संदर्भ में एक त्रुटि है जिसमें यह परिभाषित किया गया था।

संपादित

से Scope of internal method in C#?

आप किसी सार्वजनिक वर्ग जो विधानसभा में अन्य वर्गों द्वारा कहा जा सकता है पर एक विधि चाहते हैं, लेकिन की ग्राहकों द्वारा नहीं सभा।

+0

सहमत हुए। फिर भी अगर मैं विधि को आंतरिक के रूप में चिह्नित करता हूं तो मैं इसे असेंबली के अंदर संदर्भित करने में सक्षम हूं। !! – Ravisha

1

कोई चेतावनी नहीं है क्योंकि इसका कोई प्रतिकूल प्रभाव नहीं पड़ता है। सदस्यों को वैसे भी अन्य असेंबली से सुलभ नहीं किया जाएगा, भले ही आप उन्हें सार्वजनिक या आंतरिक के रूप में चिह्नित करें।

0

इस मामले पर विचार करें:

आप एक FooFactory IFoo को लागू करने की वस्तुओं का निर्माण किया है। आपका IFoo कार्यान्वयन आंतरिक हो सकता है क्योंकि आप उन्हें अन्य असेंबली में बेनकाब नहीं करना चाहते हैं जो केवल IFoo का उपयोग करें। IFoo कार्यान्वयन के सदस्य सार्वजनिक होना चाहिए ताकि उन्हें अन्य असेंबली में उपयोग किया जा सके।

इसलिए, जैसा कि मैंने अब आपके सभी प्रश्नों को पढ़ा है, मुझे नहीं लगता कि आंतरिक वर्गों पर विधियों के लिए सार्वजनिक होने के तरीकों के लिए कोई कारण नहीं है जब तक कि उन वर्गों को इंटरफेस के माध्यम से अन्य विधानसभाओं से एक्सेस नहीं किया जाता है या आधार वर्ग

+0

प्रिय एंड्रयू। मैंने इंटरफेस और बेस क्लास को छोड़कर प्रश्न में उल्लेख किया है। – Ravisha

+0

हे ... मैं एक छोटा बच्चा अपने माउस चुरा लेने की कोशिश करता है, जबकि प्रश्नों का उत्तर देने की कोशिश करने के लिए मुझे मिलता है ... –

+0

मई का समय हो सकता है कि आप चूहों के साथ खेलना बंद कर दें :) – Ravisha

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

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