C# 自";不允许向派生类或从派生类进行用户定义的转换;在我的情况下,有没有合适的替代方案?
我的测量应用程序有一个从类矩阵继承的类向量,该类向量公开了适用于一维向量类型矩阵的操作。可以预见,即使底层数组不是一维的,也会有人试图将矩阵向下转换为向量。然后,直到向量操作中出现异常,他们才知道有问题。但如果我尝试实施强制转换,即:C# 自";不允许向派生类或从派生类进行用户定义的转换;在我的情况下,有没有合适的替代方案?,c#,.net,C#,.net,我的测量应用程序有一个从类矩阵继承的类向量,该类向量公开了适用于一维向量类型矩阵的操作。可以预见,即使底层数组不是一维的,也会有人试图将矩阵向下转换为向量。然后,直到向量操作中出现异常,他们才知道有问题。但如果我尝试实施强制转换,即: public static explicit operator Vector3(Matrix m) { if (m.Array.GetLength(0) != 3 && m.Array.GetLength(1) != 1) th
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]);
}
我得到了这个头衔的例外。有什么办法可以避免吗?您的类型层次结构有问题<代码>向量首先不应该继承自矩阵——这是对经典的另一种理解 此外,将当前层次结构上的
矩阵
转换为向量
是向下转换。向下播放永远不能保证安全,因此您的用户应该预料到向下播放可能会失败。你不应该试图掩盖这件事,即使你能做到
最后,没有什么可以阻止您提供一个
AsVector3()
方法来精确执行建议的转换运算符所做的操作。感谢您提供了知识渊博的回答。什么样的向量不是矩阵?@BrandonArnold:实际上,这意味着“并非所有矩阵都是向量”,这当然不能描述你的层次结构。所以让我们假装那部分从未发生过