C# 如何为通用 class 重载运算符 +
C# how to overload operator + for universal class
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);
}
}
给出错误:无法将运算符“+”应用于 'T' 和 'T' 类型的操作数。
请帮忙解决
您可以通过将 class 的模板化私有成员更改为 dynamic
类型来克服该限制 并自行承担风险 。
示例:
public struct Vector3<T>
{
private dynamic X { get; set; }
private dynamic Y { get; set; }
private dynamic Z { get; set; }
...
....
}
不幸的是,在 C#
中没有办法将模板参数限制为数值(我想这就是您想要实现的目标)。
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);
}
}
给出错误:无法将运算符“+”应用于 'T' 和 'T' 类型的操作数。
请帮忙解决
您可以通过将 class 的模板化私有成员更改为 dynamic
类型来克服该限制 并自行承担风险 。
示例:
public struct Vector3<T>
{
private dynamic X { get; set; }
private dynamic Y { get; set; }
private dynamic Z { get; set; }
...
....
}
不幸的是,在 C#
中没有办法将模板参数限制为数值(我想这就是您想要实现的目标)。