是否有表示数字的值类型共享的接口?

dlr*_*as2 5 c# generics

我希望能够创建具有可变精度的各种结构.例如:

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(对于浮点数),但是如果你需要一个基于字节的点或双精度,那么你将被要求复制很多旧的代码,只是更改值类型.

Hei*_*nzi 2

不能这样做的原因很简单:运算符是非虚拟的,即编译器必须在编译时知道是p1.X+p2.X整数加法还是双倍加法。

  • @Daniel:不,它在编译时不知道 T 的类型...您可能正在开发一个库,因此编译器无法知道您的客户将传递给您的类的 *哪个* T 。 (2认同)