Freigeben über


Die spät gebundene Überladungsauflösung kann nicht auf '<Prozedurname>' angewendet werden, da die zugreifende Instanz ein Schnittstellentyp ist

Aktualisiert: November 2007

Latebound overload resolution cannot be applied to '<procedurename>' because the accessing instance is an interface type

Der Compiler versucht, einen Verweis auf eine überladene Eigenschaft oder Prozedur aufzulösen, doch der Verweis schlägt fehl, weil ein Argument vom Typ Object ist und der Datentyp des verweisenden Objekts eine Schnittstelle ist. Das Object-Argument erzwingt das Auflösen des Verweises durch den Compiler als spät gebundenen.

Unter diesen Bedingungen löst der Compiler die Überladung über die implementierende Klasse und nicht über die zugrunde liegende Schnittstelle auf. Wenn die Klasse eine der überladenen Versionen umbenennt, behandelt der Compiler diese Version nicht als Überladung, da sie einen anderen Namen aufweist. Dies wiederum bewirkt, dass der Compiler die umbenannte Version ignoriert, obwohl sie möglicherweise die richtige Version zum Auflösen des Verweises ist.

Fehler-ID: BC30933

So beheben Sie diesen Fehler

  • Verwenden Sie CType, um das Argument von Object in den Typ umzuwandeln, der durch die Signatur der aufzurufenden Überladung angegeben wird.

    Beachten Sie, dass das Problem nicht durch Umwandeln des verweisenden Objekts in die zugrunde liegende Schnittstelle behoben wird. Sie müssen das Argument umwandeln, um diesen Fehler zu vermeiden.

Beispiel

Im folgenden Beispiel wird der Aufruf einer überladenen Sub-Prozedur veranschaulicht, die diesen Fehler zur Kompilierzeit verursacht.

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

Wenn der Compiler im vorherigen Beispiel den Aufruf von s1 entsprechend dem geschriebenen Code zulässt, erfolgt die Auflösung über die Klasse c1 statt über die Schnittstelle i1. Dies bedeutet, dass der Compiler s2 nicht berücksichtigt, da sich ihr Name von c1 unterscheidet, obwohl sie gemäß der Definition durch i1 die richtige Version ist.

Sie können den Fehler beheben, indem Sie den Aufruf in eine der beiden folgenden Codezeilen ändern:

refer.s1(CType(o1, Integer))
refer.s1(CType(o1, Double))

In jeder der obigen Codezeilen wird die Object-Variable o1 explizit in einen der für Überladungen definierten Parametertypen umgewandelt.

Siehe auch

Konzepte

Prozedurüberladung

Überladungsauflösung

Referenz

CType-Funktion