我試圖將一些部分從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