我希望能够创建具有可变精度的各种结构.例如:
public struct Point<T> where T : INumber
{
public T X;
public T Y;
public static Point<T> operator +(Point<T> p1, Point<T> p2)
{
return new Point<T>
{
X = p1.X+p2.X,
Y = p1.Y+p2.Y
};
}
}
Run Code Online (Sandbox Code Playgroud)
我知道Microsoft通过创建两个结构来处理这个问题 - Point
(对于整数)和PointF
(对于浮点数),但是如果你需要一个基于字节的点或双精度,那么你将被要求复制很多旧的代码,只是更改值类型.
不能这样做的原因很简单:运算符是非虚拟的,即编译器必须在编译时知道是p1.X+p2.X
整数加法还是双倍加法。