c # में आंतरिक बनाम सार्वजनिक


92

मैं दृश्यता publicऔर internalदृश्यता संशोधक के बीच अंतर जानना चाहता हूं ।

हमें internalकक्षा में कब उपयोग करना चाहिए और कब करना चाहिए public? मैं जब एक विधि होना चाहिए के साथ भ्रमित कर रहा हूँ publicया internal।

मैंने पढ़ा कि internalविधानसभा के माध्यम से पहुँचा जा सकता है, जबकि विधानसभा के माध्यम से publicभी उपयोग किया जा सकता है जहां अंतर निहित है।

जवाबों:


101

public जहाँ से भी दिख रहा है।

internal केवल एक विधानसभा के भीतर दिखाई देता है

आप केवल आंतरिक APIs की सुरक्षा के लिए आंतरिक का उपयोग करते हैं। उदाहरण के लिए, आप एक विधि के कई अधिभार को उजागर कर सकते हैं:

public int Add(int x, int y)
public int Add(int x,int y, int z)

जिसे दोनों आंतरिक विधि कहते हैं

internal int Add(int[] numbers)

फिर आप एक विधि पर बहुत सारे परिष्कार कर सकते हैं, लेकिन इसे मुखौटा विधियों का उपयोग करके "सुरक्षित" करें जो प्रोग्रामर को सही तरीके से कॉल करने में मदद कर सकते हैं। (सरणी पैरामीटर के साथ कार्यान्वयन विधि में उदाहरण के लिए मानों की मनमानी सीमा हो सकती है।)

यह भी ध्यान देने योग्य है कि परावर्तन का उपयोग करते हुए, कोई भी और सभी विधियां उनकी दृश्यता की परवाह किए बिना कॉल करने योग्य हैं। आंतरिक रूप से छिपे हुए एपीआई तक पहुंच को नियंत्रित / प्राप्त करने के लिए एक और "हैक"।


5
एक आंतरिक वर्ग में मैं सार्वजनिक तरीकों की घोषणा कर सकता हूं ..?
— NoviceToDotNet

नहीं, क्योंकि इससे टकराव होगा। संकलक आपको इस बारे में बताएगा और संकलन करने में विफल रहेगा।
— कार्यक्रम .X

14
@ Program.X: वास्तव में, आप कर सकते हैं और संकलक आपको कुछ भी नहीं बताता है।
— या मैपर

वास्तव में मैं यहाँ आया था कि यह वास्तव में एक विशेषता है या नहीं। कक्षा internalऔर सभी तरीकों को बनाने की कल्पना करें public। यदि आपको उच्च दृश्यता की आवश्यकता है, तो आप पूरी कक्षा को publicफिर से सेट कर सकते हैं । लेकिन मुझे यकीन नहीं है, इस तरह से इसका इस्तेमाल किया जाना है या नहीं। इसलिए मैं googling जारी रखता हूं ... Et voilà, उसी विषय को संपादित करें : stackoverflow.com/questions/9302236/…
— ect

31

internalउपयोगी है जब आप किसी सदस्य को डीएलएल के अंदर घोषित करना चाहते हैं, न कि बाहर ...
सामान्य रूप से, जब आप किसी सदस्य को घोषित करते हैं, जैसा Publicकि आप अन्य डीएलएल से एक्सेस कर सकते हैं। लेकिन, अगर आपको अपनी कक्षा के पुस्तकालय के अंदर सार्वजनिक होने के लिए कुछ घोषित करने की आवश्यकता है, तो आप इसे घोषित कर सकते हैं Internal।
औपचारिक चूक में: आंतरिक सदस्य वर्तमान विधानसभा के अंदर ही दिखाई दे रहे हैं ...


11

internalइकाई परीक्षण लिखते समय भी उपयोगी है। यह InternalsVisibleToविशेषता है कि आपके कोड असेंबली में आपके टेस्ट असेंबली एक्सेस के आंतरिक तरीके हैं। यानी आप उन तरीकों का परीक्षण कर सकते हैं जो प्रतिबिंब का उपयोग किए बिना बाहरी दुनिया में निजी दिखाई देते हैं।


6

जनता को विधानसभा के बाहर भी पहुँचा जा सकता है। इसलिए जब आपके पास एक वर्ग है जिसे विधानसभा में हर वर्ग तक पहुंच नहीं होनी चाहिए, तो इसे एक्सेस करने में सक्षम होना चाहिए, फिर आंतरिक सही बात है। यदि आपको बाहर की आवश्यकता है, तो सार्वजनिक उपयोग करें।


4

इसके अलावा, संपत्तियों के रूप में चिह्नित अगर internalएक BindingExpression path errorWPF में DataBinding के लिए इस्तेमाल किया फेंक देंगे । तो उन्हें publicठीक से काम करने के लिए होना चाहिए , तब भी जब DataBinding एक ही विधानसभा के भीतर होता है।


-3

यदि आप बाहर से असेंबल को संदर्भित कर सकते हैं, तो आपके पास आंतरिक और सार्वजनिक कक्षाओं का दायरा है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.