2010-09-17 20 views
5

का डिफ़ॉल्ट एक्सेस संशोधक बनाम मैं बनाम 2010 में नमूना वर्ग बना देता हूं।सी # मुख्य() विधि

क्लास व्यू के माध्यम से, मुझे मुख्य आंतरिक के लिए डिफ़ॉल्ट एक्सेस संशोधक दिखाई देता है।

मैं कुछ लोगों को यह भी देखता हूं कि मुख्य के लिए डिफ़ॉल्ट पहुंच संशोधक "निस्संदेह निजी" है।

विजुअल स्टूडियो 2010 स्वचालित रूप से एक कार्यक्रम की मुख्य() विधि को पूरी तरह से निजी रूप से परिभाषित करता है। ऐसा करने से अन्य अनुप्रयोगों को सीधे दूसरे के प्रवेश बिंदु का आह्वान नहीं कर सकता है।

मुझे पता है कि आंतरिक और निजी के बीच अंतर हैं। तो कौन सा सही है?

उत्तर

13

अपने कोड इस तरह दिखाई देता है:

static void Main() 

तो है कि एक निजी विधि है। (static हिस्सा अभिगम्यता के लिए ऑर्थोगोनल है, लेकिन प्रवेश बिंदु होना आवश्यक है।) सामान्यतः, किसी भी सदस्य की डिफ़ॉल्ट पहुंच सबसे निजी पहुंच है जिसे आप घोषित कर सकते हैं। तो कक्षा या संरचना में विधियों के लिए, यह निजी है। शीर्ष-स्तर (गैर-नेस्टेड) ​​प्रकारों के लिए यह आंतरिक है। कक्षा/संरचना में घोषित किसी भी सदस्य के लिए, यह निजी है। इंटरफ़ेस और enum सदस्यों के लिए, यह सार्वजनिक है।

कक्षा कोड के माध्यम से क्लास व्यू के स्क्रीनशॉट को देखे बिना क्लास व्यू के माध्यम से आप जो देख रहे हैं उसे समझना मुश्किल है, लेकिन विधि के लिए डिफ़ॉल्ट पहुंच निश्चित रूप से निजी है। यह सच है कि यह Main विधि है या नहीं।


स्पष्ट इंटरफेस कार्यान्वयन यहाँ थोड़ा अजीब है, के रूप में यह न तो निजी है और न ही सार्वजनिक है, यह केवल इंटरफ़ेस के माध्यम से, प्रकार के माध्यम से सुलभ नहीं है।

+1

बेशक, एक 'इंटरफेस' या 'एनम' प्रकार के अंदर घोषित एक सदस्य हमेशा सार्वजनिक होता है, और इसे 'एनम' और' इंटरफेस 'प्रकार के सदस्यों के साथ किसी भी एक्सेस संशोधक को निर्दिष्ट करने की अनुमति नहीं है। एक वर्ग 'या 'struct' में घोषित सदस्यों को निश्चित रूप से डिफ़ॉल्ट रूप से निजी हैं, जैसा कि आप कहते हैं। एक और मुद्दा: ऊपर 'मुख्य' विधि गैर स्थैतिक है, इसलिए यह एक प्रविष्टि बिंदु नहीं हो सकता है। –

+0

@JeppeStigNielsen: संपादित करेंगे। –

2

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

+1

* गैर-नेस्टेड * कक्षा के लिए डिफ़ॉल्ट आंतरिक है। एक नेस्टेड प्रकार के लिए यह निजी है। –

1

निजी सदस्य केवल उस वर्ग के शरीर के भीतर पहुंच योग्य हैं जिसमें उन्हें घोषित किया जाता है।

आंतरिक प्रकार या सदस्य केवल एक ही विधानसभा

आंतरिक में फ़ाइलों के भीतर सुलभ हैं सार्वजनिक लेकिन केवल एक ही विधानसभा के सभी तत्वों के लिए 'की तरह है।' असेंबली 1 का क्लास 1 असेंबली 2 के आंतरिक तत्व को 'देख' या एक्सेस नहीं कर सकता है।

3

आप कक्षा ब्राउज़र में किसी सदस्य के लिए डिफ़ॉल्ट पहुंच संशोधक नहीं देख सकते हैं, तो आप वास्तविक एक्सेस संशोधक देख सकते हैं।

नामस्थान स्तर पर कक्षाओं के लिए डिफ़ॉल्ट पहुंच संशोधक internal है, जबकि कक्षा सदस्यों (नेस्टेड कक्षाओं सहित) के लिए डिफ़ॉल्ट पहुंच संशोधक private है। Main() फ़ंक्शन के लिए कोई विशेष केस नहीं है। यदि इससे पहले कोई एक्सेस संशोधक नहीं है (ला ला स्कीट का उदाहरण), तो यह private है। यदि कोई है, तो यही वह है।

2

हालांकि आपने अपना प्रश्न टैग किया है, तो मुझे यह कहना है कि VS2010 द्वारा जेनरेट किए गए डिफ़ॉल्ट Program.Main के लिए एक्सेस संशोधक वास्तव में प्रोजेक्ट टेम्पलेट पर निर्भर करते हैं, इन पर प्रत्येक भाषा के लिए भिन्न होता है। मैं जल्दी से करने की कोशिश की है:

  • एक VB.NET सांत्वना परियोजना में, Program मॉड्यूल (स्थिर वर्ग) (सी # में अर्थात internal) Friend है और Main स्थिर विधि Public है।

  • एक सी # कंसोल परियोजना में, Programinternal है, और Mainprivate है।

है यही कारण है, एक सी # परियोजना बस डिफ़ॉल्ट पहुँच संशोधक (कक्षाओं के लिए internal, तरीकों के लिए private) का उपयोग करेगा।

0

डिफ़ॉल्ट रूप से मुख्य() में सी # के लिए एक्सेस विनिर्देश निजी है।

जब मैंने आईएलडीएएसएम में एमएसआईएल (आईएल) कोड देखा तो मुझे यही मिला।

आप देख सकते हैं कि मुख्य() निजी है। IL code of Simple Program in C#

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