2012-10-24 34 views
5

में दो फ़ाइलों में एक विधि को विभाजित करना क्या सी # में दो फाइलों में एक विधि को विभाजित करना संभव है? मुझे पता है कि आंशिक तरीके हैं, लेकिन वे ऐसा नहीं कर सकते हैं।सी #

यहां परिदृश्य है। मैं एक ओपन-सोर्स लाइब्रेरी का उपयोग कर रहा हूं और एक या अधिक फ़ाइलों में कुछ अनुकूलन जोड़ने की जरूरत है। उदाहरण के लिए, मैं कक्षा Employee कक्षा में दो नए फ़ील्ड जोड़ना चाहता हूं और फिर उन्हें उस श्रेणी के InitializeFields() विधि में प्रारंभ करना चाहता हूं। चूंकि ओपन-सोर्स प्रोजेक्ट विकसित हो रहा है और अब हर बार नए संस्करण जारी किए जाते हैं, इसलिए मैं पुस्तकालय के नए संस्करणों को आसानी से अपग्रेड करने के लिए, मेरी प्रोजेक्ट को मूल प्रोजेक्ट से अलग रखना चाहता हूं।

मैं पहले से ही partial class सिंटैक्स का उपयोग Orig.cs और Custom.cs में सभी आवश्यक वर्गों विभाजित किया है, और Custom.cs में मेरे कस्टम फ़ील्ड जोड़ लिया है। अब समस्या यह है कि मेरे पास InitializeFields() विधि को विभाजित करने का कोई तरीका नहीं है, ताकि मेरा कस्टम कोड Custom.cs फ़ाइल में जा सके।

कृपया ध्यान दें कि मैं समस्या का समाधान करने के लिए विरासत का उपयोग नहीं कर सकता। ओपन-सोर्स लाइब्रेरी में कर्मचारी वर्ग के कई संदर्भ होंगे और मैं उन सभी को बदलने का जोखिम नहीं उठा सकता।

+7

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

+0

मुझे खेद है कि आप विरासत का उपयोग क्यों नहीं कर सकते? बदलने के लिए बहुत कुछ है? यह हल करता है और इसे हल करता है? –

+0

_ में कर्मचारी वर्ग के कई संदर्भ हो सकते हैं और मैं उन सभी को बदलने का जोखिम नहीं उठा सकता हूं- __Refactor, Rename__ –

उत्तर

5

जब आप ऐसा करते हैं, तो आप लाइब्रेरी को स्वयं संकलित कर रहे हैं, है ना?

मुझे लगता है कि आप Employee उपclass नहीं करना चाहते हैं, क्योंकि तब सभी लाइब्रेरी कोड new Employee() काम नहीं करेंगे। हालांकि, अगर आप Orig.cs में EmployeeEmployeeBase का नाम बदलते हैं, और कस्टम.cs में कक्षा Employee प्रदान करते हैं तो क्या होगा? इस तरह जब पुस्तकालय कोड संकलित किया जाता है, new Employee() आपकी कक्षा का संदर्भ देगा, लाइब्रेरी नहीं। चूंकि आप एक ही प्रोजेक्ट में लाइब्रेरी और अपनी अनुकूलन संकलित कर रहे हैं, इसलिए आप इस प्रतिस्थापन को बना सकते हैं।

+0

बहुत रचनात्मक उत्तर :) –

+0

धन्यवाद डेविड। ओओपी का चालाक उपयोग। – dotNET