सी # में एक कक्षा बनाना संभव है जिसे आंतरिक रूप से (अनदेखा) से लिया जा सकता है, लेकिन फिर अन्य लोगों को मेरी सार्वजनिक कक्षा (मुहरबंद) से विरासत में मेरी लाइब्रेरी को संदर्भित करने से रोकना संभव है?क्या मैं कक्षा को अनदेखा कर सकता हूं लेकिन बाहरी रूप से सील कर सकता हूं?
उत्तर
मुझे लगता है कि आप कक्षा internal
के निर्माता का निर्माण कर सकते हैं ताकि आपकी असेंबली में केवल अन्य वर्ग ही उनसे प्राप्त हो सकें, अगर आपको अभी भी उस कक्षा के उदाहरण बनाने की आवश्यकता है तो आप उदाहरण वापस करने के लिए एक कारखाना विधि प्रदान कर सकते हैं। एक नमूना जोड़ने के लिए
संपादित करें:
public class MyFoo
{
internal MyFoo()
{
}
public static MyFoo CreateFoo()
{
return new MyFoo();
}
}
एरिक Lippert तीन तरीके यह करने के लिए कहते हैं। टीएल; डॉ: अपनी कक्षा को सील न करें, लेकिन अपनी कक्षा में एक आंतरिक सार विधि शामिल करें, या सभी रचनाकारों को आंतरिक या निजी बनाएं, या कक्षा में मेटाडेटा जोड़ने के लिए PermissionSet
विशेषता का उपयोग करें।
तुम भी कुछ इस तरह कर रही कोशिश कर सकते हैं।
internal class InternalExtendible
{
public string MyProperty { get; set; }
}
public sealed class ExternalSealedClass : InternalExtendible
{
}
आंतरिक कक्षा बनाएं और आंतरिक कक्षा से प्राप्त सार्वजनिक खाली कक्षा बनाएं। डीएलएल का संदर्भ देते समय, केवल सार्वजनिक वर्ग उपयोगकर्ता को दिखाई देगा, लेकिन आंतरिक वर्ग की सभी कार्यक्षमता का खुलासा किया जाएगा।
मेरे लिए हुआ, लेकिन बड़ी समस्या यह है कि यदि इस प्रकार का उपभोग करने या वापस करने के लिए सार्वजनिक पहुंच योग्य तरीके हैं - हस्ताक्षर क्या है? यदि आप 'बाहरीसेल्ड क्लास' का उपयोग करते हैं, तो आपके "वास्तविक" उत्तराधिकारी पात्र नहीं होंगे। यदि आप 'InternalExtensible' का उपयोग करते हैं, तो आपकी विधियां अब सार्वजनिक नहीं हो सकती हैं। – mquander
@mquander क्या आप बस इंटरफ़ेस में प्रोग्रामिंग करके उस के आसपास नहीं जा सकते? यानी आपका हस्ताक्षर "शून्य DoSomething (IExtendableOrSealed आइटम) {...} जैसा दिखता है" – Michael
- 1. क्या मैं वालिग्रिंड ग्लिब पुस्तकालयों को अनदेखा कर सकता हूं?
- 2. क्या मैं वैश्विक .gitignore को अनदेखा कर सकता हूं?
- 3. मैं सेटअपtools subversion सूची को अनदेखा कैसे कर सकता हूं?
- 4. क्या मैं फ़्लैश स्क्रैप कर सकता हूं?
- 5. क्या मैं कक्षा वस्तुओं के साथ ऐसा कर सकता हूं?
- 6. क्या मैं बीनक्रिएशन अपवाद को अनदेखा कर सकता हूं और इसके बजाय शून्य को इंजेक्ट कर सकता हूं?
- 7. PHP 5 में क्या मैं गतिशील रूप से कक्षा को चालू कर सकता हूं?
- 8. मैं एक कक्षा को "अनसेट" कैसे कर सकता हूं जिसे
- 9. क्या मैं CreateFile का उपयोग कर सकता हूं, लेकिन हैंडल को std :: ofstream में मजबूर कर सकता हूं?
- 10. मैं स्प्लिंट को अनदेखा कैसे कर सकता हूं जहां मैं अपने चर घोषित करता हूं?
- 11. मैं Win32 असेंबली को अनइंस्टॉल कैसे कर सकता हूं और WinSxS को साफ़ कर सकता हूं?
- 12. फोरमैन Nginx शुरू नहीं कर सकता, लेकिन मैं इसे मैन्युअल रूप से शुरू कर सकता हूं। क्यूं कर?
- 13. क्या मैं वर्चुअलएन्ड्स घोंसला कर सकता हूं?
- 14. क्या मैं सी ++ में संरचना को नष्ट कर सकता हूं?
- 15. .hgignore का उपयोग कर एक को छोड़कर मैं सभी निर्देशिकाओं को कैसे अनदेखा कर सकता हूं?
- 16. क्या मैं एक सी ++ मैक्रो को फिर से परिभाषित कर सकता हूं, फिर इसे वापस परिभाषित कर सकता हूं?
- 17. मैं अस्थायी रूप से फ़ॉन्ट कैसे लोड कर सकता हूं?
- 18. मैं पहचान मैन्युअल रूप से कैसे सम्मिलित कर सकता हूं?
- 19. मैं बाहरी कमांड कैसे चला सकता हूं और पर्ल में अपना आउटपुट कैप्चर कर सकता हूं?
- 20. क्या मैं स्कैला में ब्रांड्स को अधिभारित कर सकता हूं?
- 21. मैं अनिश्चित काल तक लूप कैसे कर सकता हूं, लेकिन कुछ स्थितियों पर रोक सकता हूं?
- 22. वर्ग प्रकार क्यों सील नहीं किया गया है, और मैं इसके साथ क्या कर सकता हूं?
- 23. मैं आउटपुटस्ट्रीम को कैसे कार्यान्वित कर सकता हूं जिसे मैं रिवाइंड कर सकता हूं?
- 24. मैं कक्षा से प्रोग्रामेटिक रूप से स्टोरीबोर्ड कैसे लोड कर सकता हूं?
- 25. क्या मैं साझा पुस्तकालयों को जोड़ते समय जीसीसी को स्थिर पुस्तकालयों को अनदेखा कर सकता हूं?
- 26. क्या मैं MooseX :: घोषणा का उपयोग कर कक्षा के बाहर फ़ंक्शंस को परिभाषित कर सकता हूं?
- 27. सबवर्जन: क्या मैं चेकआउट कर सकता हूं, संशोधित कर सकता हूं, और फिर इसे शाखा बना सकता हूं?
- 28. मैं सुपरक्लास को कैसे नजरअंदाज कर सकता हूं?
- 29. क्या मैं जेवीएम में डीएलएल इंजेक्ट कर सकता हूं और जेएनआईएनएनवी प्राप्त कर सकता हूं?
- 30. क्या मैं एसवीएन का अनुकरण कर सकता हूं: बाहरी का उपयोग कर बाह्य?
कूल जो बहुत अच्छा काम करता है। धन्यवाद! –