BC30933: Latebound overload resolution cannot be applied to '<procedurename>' because the accessing instance is an interface type
The compiler is attempting to resolve a reference to an overloaded property or procedure, but the reference fails because an argument is of type Object
and the referring object has the data type of an interface. The Object
argument forces the compiler to resolve the reference as late-bound.
In these circumstances, the compiler resolves the overload through the implementing class instead of through the underlying interface. If the class renames one of the overloaded versions, the compiler does not consider that version to be an overload because its name is different. This in turn causes the compiler to ignore the renamed version when it might have been the correct choice to resolve the reference.
Error ID: BC30933
To correct this error
Use
CType
to cast the argument fromObject
to the type specified by the signature of the overload you want to call.Note that it does not help to cast the referring object to the underlying interface. You must cast the argument to avoid this error.
Example
The following example shows a call to an overloaded Sub
procedure that causes this error at compile time.
Module m1
Interface i1
Sub s1(ByVal p1 As Integer)
Sub s1(ByVal p1 As Double)
End Interface
Class c1
Implements i1
Public Overloads Sub s1(ByVal p1 As Integer) Implements i1.s1
End Sub
Public Overloads Sub s2(ByVal p1 As Double) Implements i1.s1
End Sub
End Class
Sub Main()
Dim refer As i1 = New c1
Dim o1 As Object = 3.1415
' The following reference is INVALID and causes a compiler error.
refer.s1(o1)
End Sub
End Module
In the preceding example, if the compiler allowed the call to s1
as written, the resolution would take place through the class c1
instead of the interface i1
. This would mean that the compiler would not consider s2
because its name is different in c1
, even though it is the correct choice as defined by i1
.
You can correct the error by changing the call to either of the following lines of code:
refer.s1(CType(o1, Integer))
refer.s1(CType(o1, Double))
Each of the preceding lines of code explicitly casts the Object
variable o1
to one of the parameter types defined for the overloads.
See also
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for