首页 > 解决方案 > 类中具有参数 int 和 double 的两个实例构造函数(如果没有缩小转换,就无法调用可访问的“New”)

问题描述

由于一个新功能,我们需要一个名为C_Geo_Data. 该类包含一个构造函数,如下所示:

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

现在我们需要添加另一个具有以下参数的构造函数:

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

请注意第三个参数的数据类型差异。现在类中已经有一个函数调用了这个构造函数,并且第三个参数 astring被交给了构造函数。当然编译器不知道要使用哪个构造函数并给出如下编译错误:

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'.

我通过将字符串显式转换为整数 ( CInt(string)) 来修复错误,但我想知道是否有任何方法可以告诉调用者使用哪个构造函数而无需事先转换参数:

也许是这样的:

Dim test As String ="4326"
New GeoPoint(y,x,_srid=test)

标签: vb.net

解决方案


你几乎得到了正确的答案。但是您需要在参数名称后加一个冒号。

Dim test As String ="4326"
New GeoPoint(y,x,_srid:=test)

推荐阅读