ध्यान देने वाली पहली बात यह है कि VB.NET के पास C # के (type)instanceकास्टिंग तंत्र का सीधा एनालॉग नहीं है । मैं इसे ऊपर लाता हूं क्योंकि यह दो VB.NET ऑपरेटरों की तुलना में एक शुरुआती बिंदु के रूप में उपयोगी है (और वे ऑपरेटर हैं, फ़ंक्शन नहीं हैं, भले ही उनके पास फ़ंक्शन शब्दार्थ हैं)।
DirectCast()C # कास्टिंग ऑपरेटर से अधिक सख्त है। यह केवल तभी आपको कास्ट करने की अनुमति देता है जब आपके द्वारा डाली जा रही वस्तु पहले से ही टाइप की हुई हो। मेरा मानना है कि यह अभी भी अनबॉक्स वैल्यू टाइप करेगा, लेकिन अन्यथा यह कोई रूपांतरण नहीं करेगा। तो, उदाहरण के लिए, आप से डाली नहीं कर सकते shortकरने के लिए int, जैसा कि एक सी # के साथ कर सकता (int)डाली। लेकिन आप IEnumerableएक सरणी से कास्ट कर सकते हैं , अगर आपका अंतर्निहित IEnumerableऑब्जेक्ट चर वास्तव में एक है Array। और निश्चित रूप से आप किसी Objectभी चीज़ से कास्ट कर सकते हैं , यह मानते हुए कि आपके ऑब्जेक्ट का प्रकार वास्तव में वंशानुक्रम के पेड़ में आपके कलाकारों के प्रकार से नीचे है।
यह वांछनीय है क्योंकि यह बहुत तेज है । कम रूपांतरण और प्रकार की जाँच है कि जगह लेने की जरूरत है।
CType()C # कास्टिंग ऑपरेटर की तुलना में कम सख्त है। यह उन चीजों को करेगा जो आप केवल एक साधारण (int)शैली के कलाकारों के साथ नहीं कर सकते हैं , जैसे एक स्ट्रिंग को पूर्णांक में बदलना। इसमें Convert.To___()C # में कॉलिंग जितनी शक्ति है, जहां ___आपके कलाकारों का लक्ष्य प्रकार है।
यह वांछनीय है क्योंकि यह बहुत शक्तिशाली है। हालांकि, यह शक्ति प्रदर्शन की लागत पर आती है; यह तेज DirectCast()या C # के कास्ट ऑपरेटर के रूप में नहीं है क्योंकि इसे कलाकारों को खत्म करने के लिए काफी काम करने की आवश्यकता हो सकती है। आम तौर पर आपको पसंद करना चाहिए DirectCast()जब आप कर सकते हैं।
अंत में, आप एक कास्टिंग ऑपरेटर से चूक गए: TryCast()जो कि C # के asऑपरेटर के लिए एक सीधा एनालॉग है ।