generics和“二元运算符的参数之一必须是包含类型”错误

声明二元运算符时,至少有一个操作数类型必须是包含类型。 这听起来总体上是一个很好的设计决策。 但是,我没想到以下代码会导致此错误:

public class Exp { public static Exp operator +(Exp first, Exp second) { return null; } } 

这个运营商有什么问题? 为什么这种情况属于c#的运算符重载限制? 允许这种声明是危险的吗?

因为包含类型是Exp ,而不是Exp 。 你在这里要做的是C ++的专业化,这在C#中是不可能的。

您属于Exp ,并且运算符中的参数都不是Exp ,它们都是Exp

阅读本文 ,了解有关此方法的建议方法。