我在说服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方法。此外,如果存在任何歧义,编译器将捕获这些并提供错误。
修改:调用请求的代码
请注意,两个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
答案 0 :(得分:0)
数目:
答案 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
无论我传递什么,都只使用第二个功能。