我试图将一些部分从ginac(www.ginac.de)移植到C#中。但是我遇到这样的:带有两个隐式强制转换的运算符函数+不起作用
class Program {
static void Main(string[] args) {
symbol s = new symbol();
numeric n = new numeric();
ex e = s + n; // "Operator + doesn't work for symbol, numeric"
}
}
class ex {
//this should be already be sufficient:
public static implicit operator ex(basic b) {
return new ex();
}
//but those doesn't work as well:
public static implicit operator ex(numeric b) {
return new ex();
}
public static implicit operator ex(symbol b) {
return new ex();
}
public static ex operator +(ex lh, ex rh) {
return new ex();
}
}
class basic {
}
class symbol : basic {
}
class numeric : basic {
}
正确的顺序应该是:隐式转换符号 - > basic-> EX,然后numeric-> basic->前,然后使用前运营商+(EX,EX)功能。
以何种顺序查找隐式转换函数和操作符函数? 有没有办法解决这个问题?
我不认为这是第一和第二PARAM – CodesInChaos 2010-10-23 12:45:54
不完全准确之间的不对称。 “+”运算符(以及所有二元运算符)根据左操作数*或右操作数确定运算符过载的类。但是否则你是正确的 - 它将不会从任务左侧的推断类型中获取。 – 2010-10-23 13:07:20