2010-04-06 17 views
7

मैं 4 साल के लिए .NET अनुप्रयोगों का विकास कर रहा हूं। अब तक, मुझे उन वर्गों के लिए कोई अंतर्निहित रूपांतरण बनाने की आवश्यकता नहीं है जिन्हें मैंने लिखा था।
क्या आप वास्तविक जीवन स्थितियों को प्रदान कर सकते हैं जब आप निहित रूपांतरण किए बिना नहीं कर सकते?आप अपनी कक्षाओं के लिए कितनी बार अंतर्निहित रूपांतरण बनाते हैं?

धन्यवाद

+0

मैं .NET के संख्यात्मक प्रकारों के माध्यम से पहले से प्रदान किए गए किसी भी वास्तविक कारण को नहीं सोच सकता। – leppie

+2

यह समुदाय विकी होना चाहिए (कोई निश्चित उत्तर नहीं)। या पूछने के लिए कहा कि कब और क्यों नहीं चाहिए या नहीं चाहिए। यह बेहतर होगा। –

+0

@ मार्टिन्हो एक उत्तर पहले से ही स्वीकार कर लिया गया था, और यह अभी भी समुदाय विकी नहीं है, इसलिए मुझे लगता है कि सभी आशा खो गई है। :) – bzlm

उत्तर

4

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

एक उदाहरण: समन्वय प्रणालियों के बीच रूपांतरण। एक ध्रुवीय समन्वय वेक्टर जो कार्टेसियन निर्देशांक में परिवर्तित हो सकता है, उदाहरण के लिए, सुविधाजनक हो सकता है। हालांकि, फ्लोटिंग पॉइंट के दौर के कारण यह एक स्पष्ट रूपांतरण के रूप में छोड़ना बेहतर होगा ताकि प्रोग्रामर को रूपांतरण को मजबूर करने के लिए टाइपकास्ट करना पड़े।

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

यदि आपके पास प्रकारों का एक सेट है और आपने अपने नियमों को परिभाषित किया है कि प्रकार एक दूसरे के बीच कैसे परिवर्तित किए जा सकते हैं, तो उनमें से कुछ रूपांतरण अंतर्निहित हो सकते हैं और रूपांतरण की "गंभीरता" के आधार पर कुछ स्पष्ट हो सकते हैं। .NET में कक्षा को कार्यान्वित करते समय मैंने निहित रूपांतरण का उपयोग किया है, इसका प्राथमिक उदाहरण था जब मैं डेल्फी रनटाइम लाइब्रेरी के लिए Win32 Variant semantics को कार्यान्वित कर रहा था। Win32 और डेल्फी भाषा वेरिएंट डेटा पर कई रूपांतरण निर्दिष्ट करती हैं जिन्हें implicity किया जा सकता है।

कि आपको निहित रूपांतरण बनाने की आवश्यकता नहीं मिली है वास्तव में एक अच्छी बात है। सिर्फ इसलिए कि आप इसका मतलब यह नहीं कर सकते कि आपको चाहिए। .NET में लागू रूपांतरण मुख्य रूप से विभिन्न प्रोग्रामिंग भाषाओं को अपने स्वयं के अर्थशास्त्र का प्रतिनिधित्व करने की अनुमति देने के लिए मौजूद हैं जो कि अन्य .NET भाषाओं द्वारा अंतःक्रियाशील और समझने योग्य होना चाहिए।

+4

बीसीएल से एक अच्छा उदाहरण: स्ट्रिंग को XName का प्रचार। केवल इससे अच्छा आता है। –

+0

एक्सनाम सुंदर है। XNamespace के साथ कैसे निर्माण करना है, यह जानने के लिए थोड़ा अजीब है, लेकिन एक बार जब आप पैटर्न प्राप्त कर लेते हैं तो यह बहुत प्यारा है। – dthorpe

संबंधित मुद्दे