由于不允许与派生类之间的“用户定义转换”,因此“;在我的情况下,还有其他合适的选择吗
本文关键字:我的 情况下 选择 其他 派生 不允许 之间 转换 定义 用户 因此 | 更新日期: 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()
方法来完成所建议的转换操作符所做的工作。