1

おそらく継承が原因で、Visual Studio とコンパイラに正しいメソッド オーバーロードを使用させるのに問題があります。

これらのオブジェクトが与えられた場合:

Public Class Matrix
...
End Class

Public Class Vector
Inherits Matrix
...
End Class

Module には 2 つのメソッドが存在します。

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

ただし、2 つの Vector オブジェクトで Add() を明示的に呼び出すと、InvalidCastException が発生します。これは、Vector を Matrix にキャストして関数の Matrix インカネーションを使用することができないためです。私は、コンパイラが可能な限り最も具体的なメソッドを使用しようとするという印象を受けました。したがって、これらの引数には Vector メソッドを使用します。さらに、あいまいさがある場合、コンパイラはこれらをキャッチしてエラーを提供します。

  1. この動作は仕様ですか?
  2. Vector メソッドの使用を強制することはできますか? 両方の引数をキャストしようとしましたが、既にベクトルとして次元設定されているため、効果はありません。

編集:呼び出しコードが要求されました

2 つの 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 に答える