方法重载错误重载

时间:2012-05-03 20:27:55

标签: vb.net methods overloading

我在说服Visual Studio和编译器使用正确的方法重载时遇到了问题,可能是因为继承。

鉴于这些对象:

Public Class Matrix
...
End Class

Public Class Vector
Inherits Matrix
...
End Class

模块中存在两种方法:

Public Function Add(vector1 as Vector, vector2 as Vector) as Vector
...
End Function

Public Function Add(matrix1 as Matrix, matrix2 as Matrix) as Matrix
...
End Function

但是当我在两个Vector对象上显式调用Add()时,我得到一个InvalidCastException,因为Vector无法转换为Matrix以使用函数的Matrix化身。我的印象是编译器会尝试使用最具体的方法,因此对于这些参数使用Vector方法。此外,如果存在任何歧义,编译器将捕获这些并提供错误。

  1. 此行为是否符合规范?
  2. 是否可以强制使用Vector方法?我已经尝试过转换这两个参数,但由于它们已经被标注为Vector,因此它没有任何效果。
  3. 修改:调用请求的代码

    请注意,两个Add方法在同一个Math模块中,即

    Public Module Math
        Public Function Add(vector1 as Vector, vector2 as Vector) as Vector
        ...
        End Function
    
        Public Function Add(matrix1 as Matrix, matrix2 as Matrix) as Matrix
        ...
        End Function
    
        Public Function Subtract(ByVal vector1 As Vector, ByVal vector2 As Vector) As Vector
            Return Add(vector1, -vector2)
        End Function
    End Module
    

2 个答案:

答案 0 :(得分:0)

数目:

  1. 不,不是;您可能在项目中定义了多个Vector或Matrix类型对象。这就是你得到InvalidCastException的原因。
  2. 你不需要。

答案 1 :(得分:0)

我遇到了同样的困境,即IVisualCollection继承了IEnumerable。

Public Function Export(ByVal collection As IVisualCollection) As Object
    ...
End Function

Public Function Export(ByVal collection As IEnumerable) As Object
    ...
End Function

无论我传递什么,都只使用第二个功能。