สิ่งแรกที่ควรทราบคือ VB.NET ไม่มี(type)instanceกลไกการหล่อแบบอะนาล็อกโดยตรงกับ C # ฉันนำสิ่งนี้มาใช้เนื่องจากมีประโยชน์เป็นจุดเริ่มต้นในการเปรียบเทียบตัวดำเนินการ VB.NET สองตัว (และเป็นตัวดำเนินการไม่ใช่ฟังก์ชันแม้ว่าจะมีความหมายของฟังก์ชันก็ตาม)
DirectCast()เข้มงวดกว่าตัวดำเนินการหล่อ C # อนุญาตให้คุณร่ายได้ก็ต่อเมื่อไอเทมที่กำลังร่ายอยู่นั้นเป็นประเภทที่คุณกำลังร่าย ฉันเชื่อว่ามันจะยังคงยกเลิกการใช้งานประเภทค่า แต่ไม่เช่นนั้นจะไม่ทำการแปลงใด ๆ ดังนั้นสำหรับตัวอย่างเช่นคุณจะไม่สามารถส่งจากshortไปintเช่นคุณสามารถด้วย C # (int)หล่อ แต่คุณสามารถส่งจากIEnumerableอาร์เรย์ได้หากIEnumerableตัวแปรออบเจ็กต์พื้นฐานของคุณเป็นArrayไฟล์. และแน่นอนว่าคุณสามารถร่ายจากObjectอะไรก็ได้โดยสมมติว่าประเภทของอินสแตนซ์วัตถุของคุณอยู่ที่ไหนสักแห่งที่ต่ำกว่าประเภทการร่ายของคุณในแผนผังการสืบทอด
นี่เป็นที่พึงปรารถนาเพราะเร็วกว่ามาก มีการตรวจสอบ Conversion และประเภทน้อยกว่าที่จำเป็นต้องเกิดขึ้น
CType()เข้มงวดน้อยกว่าตัวดำเนินการหล่อ C # มันจะทำสิ่งที่คุณไม่สามารถทำได้ด้วยการ(int)ร่ายแบบธรรมดาเช่นการแปลงสตริงเป็นจำนวนเต็ม มันมีพลังมากพอ ๆ กับการเรียกConvert.To___()ใน C # ซึ่ง___เป็นประเภทเป้าหมายของการร่ายของคุณ
สิ่งนี้เป็นที่พึงปรารถนาเพราะมีพลังมาก อย่างไรก็ตามพลังนี้มาพร้อมกับต้นทุนของประสิทธิภาพ มันไม่เร็วเท่าDirectCast()หรือตัวดำเนินการแคสต์ของ C # เพราะอาจต้องทำงานค่อนข้างมากในการแคสต์ให้เสร็จ โดยทั่วไปคุณควรเลือกDirectCast()เมื่อทำได้
สุดท้ายคุณพลาดหนึ่งในผู้ประกอบการหล่อ: TryCast()ซึ่งเป็นอะนาล็อกโดยตรงกับ C # 's asผู้ประกอบการ