अलग-अलग dll में आंशिक कक्षाएं


154

क्या अलग-अलग DLL में आंशिक वर्ग के लिए दो भाग (समान नामस्थान, समान श्रेणी नाम) होना संभव है?


जैसा कि दूसरों ने कहा कि यह संभव नहीं है, लेकिन विभिन्न स्रोतों से नए व्यवहार के साथ कक्षाओं को पूरक करने के तरीके हैं, वास्तव में आप अलग-अलग डीएल में क्या करना चाहते हैं?
ओजोन

मेरे मामले में, मैं एक स्टैटिक विधियों के एक जोड़े को एक वर्ग में जोड़ना चाहता हूं जो एक 3 पार्टी लाइब्रेरी में परिभाषित है। एक्सटेंशन विधियां काम नहीं करेंगी और न ही इंटरफेस और इनहेरिटेंस होगा, क्योंकि क्लास स्टैटिक है। यह पता लगाने के बाद कि आपके पास आंशिक स्थैतिक कक्षाएं हो सकती हैं, मैं यह जानने के लिए यहां आया था कि क्या यह असेंबली में काम करता है, लेकिन अफसोस यह है कि ऐसा लगता है कि यह भी काम नहीं करेगा।
बेन

जवाबों:


232

से MSDN -Partial वर्ग और तरीके :

सभी आंशिक प्रकार की परिभाषाएं एक ही प्रकार के भागों के समान विधानसभा और समान मॉड्यूल (.exe या .dll फ़ाइल) में परिभाषित की जानी चाहिए। आंशिक परिभाषाएँ कई मॉड्यूल नहीं फैला सकती हैं।


36

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

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


13

नहीं, यह संभव नहीं है। जब विधानसभा को संकलित किया जाता है तो कक्षा समाप्त करने की आवश्यकता होती है।


8

हालांकि अन्य उत्तर अप्रिय "नहीं" प्रदान करते हैं कि इस पृष्ठ पर उतरने वाला कोई भी व्यक्ति देखना या सुनना नहीं चाहता था, मैं एक और विचार से मारा गया था जिसका यहां अभी तक उल्लेख नहीं किया गया है। यदि असेंबली में आंशिक वर्गों की अनुमति थी, तो किसी को मौजूदा प्रकार के निजी सदस्यों तक पहुंच प्राप्त होगी जो उसके द्वारा नहीं लिखे गए थे, इस प्रकार उसे उन तरीकों से हेरफेर करने की अनुमति देता है जो मूल लेखक द्वारा अभिप्रेत नहीं थे, इस प्रकार सभी विरासत वर्गों की कार्यक्षमता को खतरे में डालते हैं। भी।

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


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

6

जब आप किसी विधि को किसी भिन्न dll में वर्ग में जोड़ना चाहते हैं, तो आप एक्सटेंशन विधियों का उपयोग कर सकते हैं। इस विधि का एक दोष यह है कि आप स्थैतिक विधियों को जोड़ नहीं सकते।


3

सवाल यह है कि आप दूसरी विधानसभा में आंशिक वर्ग क्यों बनाना चाहेंगे? आप असेंबलियों में अमूर्त वर्गों और इंटरफेस को परिभाषित कर सकते हैं, शायद आपको उस पर ध्यान देने की आवश्यकता है।


10
उदाहरण के लिए आईएमएचओ वैध मामले हैं: आप एमवीसी फॉर्म एनोटेशन को एक अलग विधानसभा में परिभाषित मॉडल वर्ग में जोड़ना चाह सकते हैं। विधानसभा खुद नहीं जानती है कि किस संदर्भ में इसका उपयोग किया जाता है, इसलिए विधानसभा में वर्ग के पास कोई टिप्पणी नहीं होनी चाहिए। उन्हें MVC के संदर्भ में एक आंशिक वर्ग में जोड़ा जा सकता है (हालांकि यह संभव था)।
नी

3
नी, क्यों न केवल उस वर्ग से विरासत में और शीर्ष पर अपनी विशेषताओं की घोषणा करें? यदि आप चाहें तो आप इसे उसी नाम से भी पुकार सकते हैं।
Gleno

0

आप शायद सिर्फ 3 लाइब्रेरी में कक्षा के चारों ओर अपने पुस्तकालय के भीतर एक आवरण कक्षा बनाना चाहते हैं। फिर रैपर क्लास के लिए जो भी कार्यक्षमता है उसे जोड़ें।

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