गैर-सार्वजनिक सदस्यों तक पहुँचना


हम गैर-सार्वजनिक सदस्यों तक कैसे पहुँच सकते हैं?

मेरे पास खुराक सुझाव नामक एक ऑब्जेक्ट है जिसमें एक गैर-सार्वजनिक सदस्य है जिसे “फ़्रीक्वेंसी” कहा जाता है

मैं उसी तक पहुंचना चाहता हूं.

कृपया इसमें मेरी मदद करें

समाधान 1

मूलतः, हमारे पास C# में 4 एक्सेस संशोधक हैं। सार्वजनिक, संरक्षित, आंतरिक और निजी। यहां प्रत्येक संशोधक की परिभाषाएं दी गई हैं:

1. द जनता [^] कीवर्ड प्रकार और प्रकार के सदस्यों के लिए एक एक्सेस संशोधक है। सार्वजनिक पहुंच सबसे अनुमेय पहुंच स्तर है। सार्वजनिक सदस्यों तक पहुँचने पर कोई प्रतिबंध नहीं है।

2. द संरक्षित[^] कीवर्ड एक सदस्य पहुंच संशोधक है। एक संरक्षित सदस्य उस वर्ग के भीतर से पहुंच योग्य है जिसमें इसे घोषित किया गया है, और उस वर्ग से प्राप्त किसी भी वर्ग के भीतर से जिसने इस सदस्य को घोषित किया है।

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

4. द निजी[^] कीवर्ड एक सदस्य पहुंच संशोधक है। निजी पहुंच सबसे कम अनुमेय पहुंच स्तर है। निजी सदस्य केवल उस वर्ग के मुख्य भाग या उस संरचना के भीतर ही पहुँच योग्य होते हैं जिसमें उन्हें घोषित किया गया है

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

समाधान 3

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

निम्नलिखित विधियों का प्रयोग करें System.Type: FindInterfaces, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperty, GetProperties, GetEvent, GetEvents, GetConstructorImpl, GetConstructor.

देखना http://msdn.microsoft.com/en-us/library/system.type.aspx[^].

गैर-सार्वजनिक तरीकों को खोजने के लिए, आपको “के संस्करणों का उपयोग करना होगाGet...“विधि का उपयोग करना System.Reflection.BindingFlags पैरामीटर; उपयोग System.Reflection.BindingFlags.NonPublic या System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public

-एसए

समाधान 2

एक सार्वजनिक संपत्ति बनाएं, आप उस तक पहुंच सकेंगे।

समाधान 39

इसका सरल उत्तर यह है कि एक निजी सदस्य तक पहुँचने की आवश्यकता है गलती, डिज़ाइन दोष.

कक्षाओं के आंतरिक तरीकों/स्थिति तक पहुंच के विभिन्न स्तरों की अनुमति देने के लिए उपयोग की जाने वाली एक रणनीति ओएस स्तर (समूह, अनुमतियां, उपयोगकर्ता) पर सुरक्षा मुद्दों से निपट रही है।

इस बारे में सोचें कि इंटरनेट लॉगिन उपयोगकर्ता और व्यवस्थापक को कोड संशोधित करने का अधिकार कैसे दे सकते हैं; पढ़ने/लिखने की अनुमति के विभिन्न स्तरों के साथ सुरक्षित डेटाबेस तक पहुंच कैसे हो, इसके बारे में।

एक अन्य रणनीति क्लास के कंस्ट्रक्टर में किसी प्रकार का सुरक्षा कोड पास करना है: यह हमेशा एक सुरक्षा जोखिम होता है।

यदि आपने कोड नहीं लिखा है, तो आप उसे संशोधित नहीं कर सकते, आदि, आप हैं हैकिंग कोड… एक अत्यंत अवांछनीय कार्य.

コメント

タイトルとURLをコピーしました