Konteks
Saya memiliki antarmuka induk, IParent
,
Option Explicit
Public Sub DoParentStuff()
End Sub
antarmuka anak yang mengimplementasikan IParent
, IChild
,
Option Explicit
Implements IParent
Private Sub IParent_DoParentStuff()
End Sub
Public Sub DoParentStuff()
End Sub
dan implementasi konkrit IChild
, CStandardChild
.
Option Explicit
Implements IChild
Private Sub IChild_DoParentStuff()
End Sub
Public Sub DoParentStuff()
IChild_DoParentStuff
End Sub
Saya kemudian membuat modul yang meneruskan variabel tipe IChild
ke subrutin dengan satu parameter tipe 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
Saya dapat mengkompilasi proyek VBA tanpa kesalahan. Namun, saat saya menjalankan Main
, saya mendapatkan error run-time
Kesalahan waktu proses '13':
Jenis ketidakcocokan
Debugger menunjuk ke kode Test child
.
Pertanyaan
Mengapa saya mendapatkan error run-time, type-mismatch? Bagaimana saya bisa meneruskan child
ke Test()
tanpa mendapatkan kesalahan ini?
Apa yang Saya Coba
Saya telah mempertimbangkan untuk melakukan casting IChild
ke IParent
. Namun, saya tidak menggunakan VB.NET
, jadi saya tidak memiliki akses ke DirectCast
dan CType
. Dengan mengatakan ini, jika saya telah menerapkan IParent
dan IChild
dengan tepat, menurut saya pemeran tidak diperlukan.
IParent
di VBA? Cukup nyatakanDim foo As IParent: Set foo = child
- person Comintern   schedule 13.11.2018child
keTest()
tanpa menerima kesalahanType mismatch
. Namun, komentar Anda mungkin bisa menjadi cara untuk melakukannya, saya akan mencobanya, terima kasih. - person Joshua Daly   schedule 13.11.2018