1

我在说服 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 方法?我已经尝试过强制转换这两个参数,但由于它们已经被标注为向量,所以它没有效果。

编辑:请求调用代码

注意这两个 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
4

1 回答 1

0

答案:

  1. 不它不是; 您的项目中可能定义了多个 Vector 或 Matrix 类型的对象。这就是您收到 InvalidCastException 的原因。
  2. 你不需要。
于 2012-05-03T21:07:57.837 回答