声明二元运算符时,至少有一个操作数类型必须是包含类型。这听起来总体上是一个很好的设计决定。但是,我没想到以下代码会导致此错误:
public class Exp<T>
{
public static Exp<int> operator +(Exp<int> first, Exp<int> second)
{
return null;
}
}
此运营商有什么问题?为什么这种情况属于c#的运算符重载限制?允许这种声明是危险的吗?
答案 0 :(得分:5)
因为包含类型为Exp<T>
,而不是Exp<int>
。你在这里要做的是专门化 a la C ++,这在C#中是不可能的。
答案 1 :(得分:3)
您所属的类型为Exp<T>
,运算符中的参数均不是Exp<T>
,而是Exp<int>
。
阅读this article了解建议的方法。