บริบท
ฉันมีอินเทอร์เฟซหลัก IParent
,
Option Explicit
Public Sub DoParentStuff()
End Sub
ส่วนต่อประสานลูกที่ใช้ IParent
, IChild
,
Option Explicit
Implements IParent
Private Sub IParent_DoParentStuff()
End Sub
Public Sub DoParentStuff()
End Sub
และการนำไปปฏิบัติอย่างเป็นรูปธรรมของ IChild
, CStandardChild
Option Explicit
Implements IChild
Private Sub IChild_DoParentStuff()
End Sub
Public Sub DoParentStuff()
IChild_DoParentStuff
End Sub
จากนั้น ฉันสร้างโมดูลที่ส่งตัวแปรประเภท IChild
ไปยังรูทีนย่อยที่มีพารามิเตอร์ประเภท IParent
หนึ่งตัว
Option Explicit
Private Sub Test(ByRef parent As IParent)
parent.DoParentStuff
End Sub
Public Sub Main()
Dim child As IChild
Set child = New CStandardChild
Test child
End Sub
ฉันสามารถคอมไพล์โครงการ VBA ได้โดยไม่มีข้อผิดพลาด แต่เมื่อฉันรัน Main
ฉันได้รับข้อผิดพลาดรันไทม์
ข้อผิดพลาดรันไทม์ '13':
ประเภทไม่ตรงกัน
ดีบักเกอร์ชี้ไปที่โค้ด Test child
คำถาม
เหตุใดฉันจึงได้รับข้อผิดพลาดรันไทม์ ประเภทไม่ตรงกัน ฉันจะส่งผ่าน child
ถึง Test()
โดยไม่ได้รับข้อผิดพลาดนี้ได้อย่างไร
สิ่งที่ฉันได้ลอง
ฉันได้ดูการคัดเลือกนักแสดงจาก IChild
ถึง IParent
แล้ว อย่างไรก็ตาม ฉันไม่ได้ใช้ VB.NET
ดังนั้นฉันจึงไม่สามารถเข้าถึง DirectCast
และ CType
ในการพูดแบบนี้ หากฉันใช้ IParent
และ IChild
อย่างเหมาะสม ฉันไม่คิดว่าจำเป็นต้องมีนักแสดง
IParent
ใน VBA หรือไม่? เพียงแค่ประกาศDim foo As IParent: Set foo = child
- person Comintern   schedule 13.11.2018child
ไปยังTest()
โดยไม่ได้รับข้อผิดพลาดType mismatch
อย่างไรก็ตาม ความคิดเห็นของคุณอาจเป็นแนวทางได้ ฉันจะลองดู ขอบคุณ - person Joshua Daly   schedule 13.11.2018