एक कस्टम डाली भेष में एक समारोह है। चाहे एक वास्तविक कास्ट किया जाता है या एक कस्टम रूपांतरण ऑपरेटर कहलाता है, अभिव्यक्ति के संकलित समय प्रकार पर निर्भर करता है।
आपके उदाहरण में अभिव्यक्ति का संकलन समय प्रकार कास्ट Ie डाला जा रहा है। अभिव्यक्ति का प्रकार b
object
प्रकार object
में स्ट्रिंग के लिए कस्टम रूपांतरण नहीं है। हालांकि एक कास्ट मान्य हो सकता है और यह संकलक द्वारा अनुमत है।
MyString a = "test";
object b = a;
var c = (string)b;
string d = a;
var e = (string)a;
चौथी लाइन रूप में माना जाएगा // funciton एक कस्टम रूपांतरण स्ट्रिंग d = MyString.op_implicit (क) के रूप में परिभाषित कॉल;
यह पांचवीं पंक्ति के लिए भी सच है। पांचवीं पंक्ति घटनाक्रम यह सिंटैक्स कास्ट के लिए नहीं है, यह एक रूपांतरण है।
हालांकि तीसरी पंक्ति एक कलाकार की तरह दिखती है और एक कलाकार है। एक कलाकार आप संकलक को बता रहे हैं कि आपके पास रनटाइम संकलन की तुलना में किसी ऑब्जेक्ट के प्रकार के संबंध में अधिक जानकारी है। (string)a
संकलक को बताता है कि यह आश्वासन दिया जा सकता है कि ऑब्जेक्ट का प्रतिनिधित्व करने वाले ऑब्जेक्ट को रनटाइम प्रकार स्ट्रिंग होने वाला है। आपके मामले में यह सच नहीं है कि इसमें MyString
टाइप है जो स्ट्रिंग से प्राप्त नहीं होता है (और स्ट्रिंग को सील कर दिया नहीं जा सकता है)।
बिंदु यह है कि घटनात्मक कस्टम रूपांतरण (या तो अंतर्निहित या स्पष्ट का उपयोग करके परिभाषित) में समान वाक्यविन्यास होता है क्योंकि वे कास्ट से पूरी तरह अलग होते हैं। एक डाली (इनहेरिट इंटरफेस सहित) आप को या एक कलाकारों के साथ श्रृंखला के नीचे जा सकते हैं लेकिन कभी
स्रोत
2012-07-31 11:14:03
किस बारे में वर ग इसे छोड़ विरासत श्रृंखला को कभी नहीं छोड़ेंगे = b.ToString()? –