Debido a una nueva funcionalidad, necesitamos otro constructor de instancias en una clase llamada C_Geo_Data. Esta clase contiene un constructor como sigue:

        Public Sub New(_coord_Y As Double, _coord_X As Double, ByVal _srid As Integer)
        '...
        End Sub

Ahora necesitamos agregar otro constructor con los siguientes parámetros:

        Public Sub New(_coord_Y As Double, _coord_X As Double, ByVal _coord_Z As Double)
        '...
        End Sub

Tenga en cuenta la diferencia en el tipo de datos para el tercer parámetro. Ahora ya hay una función en la clase que llama a este constructor y para el tercer parámetro se entrega un string al constructor. Por supuesto, el compilador no sabe qué constructor usar y da un error de compilación de la siguiente manera:

Overload resolution failed because no accessible 'New' can be called without a narrowing conversion:
'Public Sub New(_coord_Y As Double, _coord_X As Double, _coord_Z As Double)': Argument matching parameter '_coord_Z' narrows from 'String' to 'Double'.
'Public Sub New(_coord_Y As Double, _coord_X As Double, _srid As Integer)': Argument matching parameter '_srid' narrows from 'String' to 'Integer'.

Solucioné el error convirtiendo explícitamente la cadena en un número entero (CInt(string)) pero me preguntaba si hay alguna forma de decirle a la persona que llama qué constructor usar sin convertir el parámetro de antemano:

Tal vez algo como esto:

Dim test As String ="4326"
New GeoPoint(y,x,_srid=test)
-2
bautista 24 ago. 2020 a las 17:02

1 respuesta

La mejor respuesta

Casi tienes la respuesta correcta. Pero necesita dos puntos después del nombre del parámetro.

Dim test As String ="4326"
New GeoPoint(y,x,_srid:=test)
1
CB_Ron 24 ago. 2020 a las 20:07