frameworks - C# - Overriding somes classes available in System namespace -


मेरे पास कॉम्पैक्ट .NET Framework 3.5 और .NET Framework 3.5 (वास्तव में 2 परियोजनाएं , दोनों के बीच में परिवर्तन करने वाले विकल्पों को संकलित करना)।

समस्या है, कुछ कक्षाएं CF.NET में गायब हैं इसलिए मैंने मैन्युअल रूप से इसे बनाया (और एनएटी में उपलब्ध वर्ग के सभी सदस्यों को कार्यान्वित किया।

एक उदाहरण: FtpWebRequest / FtpWebResponse classes।

ऐसा कुछ लिखना बुरा है (यदि हाँ, क्यों?):

  #if CFNET35 // केवल अगर हम कॉम्पैक्ट फ्रेमवर्क 3.5 मोड नेमस्पेस में हैं System.Net {सार्वजनिक वर्ग FtpWebRequest: WebRequest {// ...} सार्वजनिक वर्ग FtpWebResponse: WebResponse {// ...}} #endif   

मुझे यकीन है कि CF.NET35 में ये विधियाँ कभी उपलब्ध नहीं होंगे, तो क्या मैं इसे लिख सकता हूं?

मैं परियोजनाओं में मेरी लाइब्रेरी का उपयोग करते समय एक नाम टक्कर से बचने के लिए लिखूंगा। / P>

यह मुझे अन्य परियोजनाओं में हमेशा System.Net का उपयोग करने की अनुमति देता है; whitout मुझे पूछता है ढांचा मुझे इस्तेमाल होता है ...

धन्यवाद!


संपादित करें

कुछ महीने बाद, मैं उस रणनीति का आकलन करना चाहूंगा जिसका मैंने प्रयोग किया था।

जैसा कि कहा गया है, मैं सशर्त संकलन करके सिस्टम (नेट) नाम स्थान को ओवरराइड करता हूं, इसलिए मैंने दो डीएलएल (एक सीएफ। नेट के लिए, एक .NET के लिए)

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

अतः, एक बुरा विचार था, मेरे पास बहुत सारी परियोजनाएं हैं डबल में और उस तरह से अनावश्यक है कि किसी .NET ऐप को सीएफ.NET लाइब्रेरी में सीधे शामिल और उपयोग कर सकते हैं।

इसके अलावा, मुझे ध्यान में रखते हुए कुछ भी नहीं है कि अगर कोई .NET ऐप एक सीएफ.NET लाइब्रेरी ओवरराइडन सिस्टम नेमस्पेस के साथ, इसका प्रारंभिक कारण क्लास नाम टक्कर के कारण असफल हो जायेगा ...

तो, EPIC FAIL , एक जेनेरिक इंटरफ़ेस प्रदान करना इस मामले को प्रबंधित करने का सर्वोत्तम तरीका।

मैं शायद सिस्टम कस्टम कोड लिखने के लिए नामस्थान मैंने खुले स्रोत पुस्तकालयों को देखा है जो ऐसा करने का प्रयास करते हैं, और यह आम तौर पर सिरदर्द में होता है।

आप एक अंतरफलक बनाने से बेहतर हो सकते हैं जो पूर्ण और कॉम्पैक्ट ढांचे के बीच साझा किया जाता है, फिर इंटरफ़ेस को लागू करें पूर्ण और सीएफ़ में आपको कार्यक्षमता प्रदान करनी होती है जो आपको अंतर्निहित सिस्टम कक्षाएं, या कक्षाएं जो आप खुद लिखते हैं, का उपयोग करनी पड़ती हैं।

यह ओवरकिल की तरह लग सकता है, लेकिन आप भविष्य में सुरक्षित होंगे यदि सिस्टम में कुछ नेट परिवर्तन आपके कॉलिंग कोड को इंटरफ़ेस का संदर्भ देना चाहिए, और आप किसी भी कार्यान्वयन में प्लग-इन के आधार पर प्लग इन कर सकते हैं।

  // साझा इंटरफ़ेस सार्वजनिक इंटरफ़ेस IFtpUtil {SomeFileObject GetFile (SomeArgument a); शून्य पुटफ़ाइल (कुछफ़ाइलऑब्जेक्टफ़, कुछआलेखऐ); } // पूर्ण ढांचा कार्यान्वयन सार्वजनिक वर्ग FullFtpUtil: IFtpUtil {सार्वजनिक ... GetFile (...) {// पूर्ण रूपरेखा से System.Net वर्गों का उपयोग करें} सार्वजनिक ... PutFile (...) {// सिस्टम का उपयोग करें पूर्ण रूपरेखा से शुद्ध कक्षाएं}} // कॉम्पैक्ट ढांचे का कार्यान्वयन सार्वजनिक वर्ग CompactFtpUtil: IFtpUtil {सार्वजनिक ... GetFile (...) {// अपने खुद के एफ़टीपी वर्गों का प्रयोग करें} सार्वजनिक ... पुटफाइल (...) {// अपनी खुद की एफ़टीपी क्लास का प्रयोग करें}}    

Comments