BC30933: A késői túlterhelés feloldása nem alkalmazható az "eljárásnévre<">, mert a hozzáférési példány egy interfésztípus

A fordító egy túlterhelt tulajdonságra vagy eljárásra mutató hivatkozást próbál feloldani, de a hivatkozás meghiúsul, mert egy argumentum típusa Object és a hivatkozó objektum adattípusa egy interfész. Az Object argumentum kényszeríti a fordítót a hivatkozás késői kötésűként való feloldására.

Ilyen körülmények között a fordító a túlterhelést a implementálási osztályon keresztül oldja fel a mögöttes interfész helyett. Ha az osztály átnevezi az egyik túlterhelt verziót, a fordító nem tekinti túlterhelésnek ezt a verziót, mert a neve eltérő. Ez azt eredményezi, hogy a fordító figyelmen kívül hagyja az átnevezett verziót, ha lehetséges, hogy a megfelelő választás volt a hivatkozás feloldásához.

Hibaazonosító: BC30933

A hiba kijavítása

  • Az CType argumentumot a meghívni kívánt túlterhelés aláírása által megadott típusra Object adhatja le.

    Vegye figyelembe, hogy ez nem segít a hivatkozó objektumnak az alapul szolgáló felületre történő átküldésében. A hiba elkerülése érdekében le kell írnia az argumentumot.

példa

Az alábbi példa egy túlterhelt Sub eljárás hívását mutatja be, amely fordításkor okozza ezt a hibát.

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

Az előző példában, ha a fordító engedélyezte, hogy s1 a hívás meg legyen írva, a feloldás az osztályon c1 keresztül történik a felület i1helyett. Ez azt jelentené, hogy a fordító nem veszi figyelembe s2 , mert a neve eltér c1annak ellenére, hogy ez a helyes választás a megadott módon i1.

A hibát a következő kódsorok egyikére módosíthatja:

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

Az előző kódsorok mindegyike explicit módon a túlterhelésekhez Object definiált paramétertípusok egyikére öntötte a változót o1 .

Lásd még