C#如何重载operator + for universal class

时间:2015-04-03 21:23:03

标签: c# overloading operator-keyword

public struct Vector3<T>
{
    private T X { get; set; }
    private T Y { get; set; }
    private T Z { get; set; }

    public Vector3(T x, T y, T z) : this()
    {
        this.X = x;
        this.Y = y;
        this.Z = z;
    }

    public static Vector3<T> operator +(Vector3<T> v1, Vector3<T> v2)
    {
        return new Vector3<int>(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z);
    }
}

给出错误:无法应用运算符&#39; +&#39;对于&#39; T&#39;类型的oparands和&#39; T&#39;。

请帮忙解决。

1 个答案:

答案 0 :(得分:2)

您可以通过将类的模板化私有成员更改为dynamic类型来克服自行风险的限制。 示例:

public struct Vector3<T>
{
    private dynamic X { get; set; }
    private dynamic Y { get; set; }
    private dynamic Z { get; set; }
    ...
    ....
}

不幸的是,C#无法将模板参数限制为数值(我猜这是你想要实现的目标)。