由于不允许与派生类之间的“用户定义转换”,因此“;在我的情况下,还有其他合适的选择吗

本文关键字:我的 情况下 选择 其他 派生 不允许 之间 转换 定义 用户 因此 | 更新日期: 2023-09-27 18:01:16

我的测量应用程序有一个继承自类Matrix的类Vector,它暴露了适合1D矢量型矩阵的操作。可以预见的是,即使底层数组不是一维的,也有人会尝试将矩阵向下转换为向量。然后,他们不会知道有问题,直到在其中一个Vector操作中出现异常。但如果我尝试实现强制类型转换,即:

public static explicit operator Vector3(Matrix m)
{
   if (m.Array.GetLength(0) != 3 && m.Array.GetLength(1) != 1)
       throw new InvalidCastException("The matrix dimensions are invalid.");
   return new Vector3(m[0, 0], m[1, 0], m[2, 0]);
}

得到标题的例外。有什么办法可以避免吗?

由于不允许与派生类之间的“用户定义转换”,因此“;在我的情况下,还有其他合适的选择吗

您的类型层次结构有问题。Vector首先不应该继承Matrix——这是对经典圆/椭圆问题的另一种理解。

此外,在当前层次上将Matrix转换为Vector是向下转换。向下转换永远不能保证安全,因此您的用户应该预料到转换可能会失败。你不应该试图掩盖这一点,即使你有办法。

最后,没有什么可以阻止您提供AsVector3()方法来完成所建议的转换操作符所做的工作。

相关文章: