2012-05-11 12 views

उत्तर

8

कोई फर्क नहीं पड़ता।तो अंत में वे सभी कॉल new decimal(double) में

public static decimal ToDecimal(float value) 
{ 
    return (decimal) value; 
} 

:

दशमलव में:

public static explicit operator decimal(double value) 
{ 
    return new decimal(value); 
}  

Convert में आप स्रोत को देखें, तो।

+0

उपयोग के सामान्य संभव अंतर के बारे में था, लेकिन '(दशमलव) मान' और 'नया दशमलव (मान)' के बीच कोई अंतर हो सकता है: पहला अंतर्निहित डबल-टू-दशमलव रूपांतरण ऑपरेटर को आमंत्रित करता है, जबकि दूसरा दशमलव कन्स्ट्रक्टर के अधिभार का आह्वान करता है। अनुमोदित, मूल कोड शायद वही होगा, लेकिन आईएल शायद अलग है, और सी # अर्थशास्त्र निश्चित रूप से अलग हैं। – phoog

+2

@phoog दोनों के बीच कोई अंतर नहीं है। उत्तर में प्रदान की गई पहली विधि "अंतर्निर्मित" डबल-टू-दशमलव रूपांतरण ऑपरेटर नहीं है जिसे कॉल किया जाता है। आपके द्वारा प्रदान किया जाने वाला पहला तरीका कॉल कॉल पेड़ के नीचे एक विधि प्रदान करने वाले दूसरे तरीके से कॉल करता है। – JKor

+0

@JKor मैंने कोई रास्ता नहीं दिया; मैं बस टिप्पणी कर रहा हूँ। – phoog

4

वे सभी एक ही परिणाम प्राप्त करते हैं। हालांकि, यहां एक और अधिक टूट व्याख्या दी गई है:

  • विधि 1 एक नया वेरिएबल है जो स्पष्ट रूप myDouble डाले टाइप करने के लिए decimal पैदा करता है। जब आप कास्ट करते हैं, तो आप कह रहे हैं, "टाइप ए का यह ऑब्जेक्ट वास्तव में बी-व्युत्पन्न-से-ए प्रकार का ऑब्जेक्ट है या एक कास्टिंग ऑपरेटर ए से बी को कास्ट करने के लिए मौजूद है।"

  • विधि 2 एक नया वेरिएबल जो एक निर्माता अधिभार के माध्यम से उचित प्रकार (decimal) को myDouble में परिवर्तित कर देंगे पैदा करता है। जब आप एक कन्स्ट्रक्टर का आह्वान करते हैं, तो आप कह रहे हैं, "कन्स्ट्रक्टर में दिए गए तर्कों के आधार पर एक नई वस्तु बनाएं।"

  • विधि 3 एक और आधार डेटा प्रकार (decimal) करने के लिए एक आधार के डेटा प्रकार (double) धर्मान्तरित। जब आप Convert.ToDecimal() जैसे कुछ का उपयोग करते हैं, तो आप कह रहे हैं, "यह ऑब्जेक्ट बी प्रकार का नहीं है, लेकिन इसे बी प्रकार के ऑब्जेक्ट में बनाने का एक तरीका मौजूद है।"

Convert MSDN के बारे में कहा गया है:

  • एक रूपांतरण विधि मौजूद है हर दूसरे आधार प्रकार के लिए हर आधार प्रकार परिवर्तित करने के लिए। हालांकि, वास्तविक रूपांतरण ऑपरेशन तीन श्रेणियों में आता है:

  • एक प्रकार से एक रूपांतरण स्वयं ही उस प्रकार को लौटाता है। वास्तव में कोई रूपांतरण नहीं किया जाता है।

  • एक रूपांतरण जो सार्थक परिणाम नहीं दे सकता है अमान्यकास्टएक्सप्शन फेंकता है। वास्तव में कोई रूपांतरण नहीं किया जाता है। चार से बूलियन, सिंगल, डबल, डेसिमल या डेटटाइम, और उन प्रकार से चार तक रूपांतरणों के लिए एक अपवाद फेंक दिया गया है। स्ट्रिंग को छोड़कर, डेटटाइम को छोड़कर, किसी भी प्रकार से स्ट्रिंग को छोड़कर डेटटाइम से किसी भी प्रकार के रूपांतरणों के लिए अपवाद फेंक दिया जाता है। ऊपर वर्णित लोगों के अलावा, किसी भी मूल प्रकार को किसी भी अन्य प्रकार के प्रकार से परिवर्तित किया जा सकता है।
+0

उदाहरण 2 एक निर्माता ओवरलोड दिखाता है। इसके अलावा, उदाहरण 1 में कास्ट उदाहरण आपकी परिभाषा के अनुसार एक कलाकार नहीं है, क्योंकि निश्चित रूप से दशमलव डबल (न ही दूसरी तरफ) से प्राप्त होता है। इसके बजाय, सी # कास्ट ऑपरेटर के दो कार्य हैं: (1) प्रतिनिधित्व प्रकारों का प्रतिनिधित्व-संरक्षण प्रकार कास्टिंग और (2) अंतर्निर्मित या उपयोगकर्ता परिभाषित स्पष्ट (या निहित) रूपांतरणों का आह्वान करना। – phoog

3

वास्तव में, कार्यात्मक दृष्टिकोण से कोई अंतर नहीं है। के ये अलग-अलग तरीके हैं एक ही परिणाम प्राप्त करें।

Convert.ToDecimal के मामले में यह मानने के लिए महत्वपूर्ण है कि आपके पास प्रारूप IFormatProvider (संस्कृति) निर्दिष्ट करने की संभावना है, इसलिए आपको अधिक लचीलापन प्राप्त होता है।

यदि आपको मल्टीकल्चर पर्यावरण की परवाह नहीं है, तो उनमें से किसी भी को चुनें।

+1

मुझे लगता है कि IFormatProvider को यहां अनदेखा किया गया है, क्योंकि न तो इनपुट और न ही आउटपुट एक स्ट्रिंग है। – phoog

+0

हाँ, सही। नोट – Tigran

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