一部を 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 {
}
正しい順序は次のとおりです: 暗黙的にシンボル->基本->ex、次に数値->基本->exをキャストし、次にex演算子+(ex,ex)関数を使用します。
暗黙のキャスト関数と演算子関数のルックアップはどの順序で行われますか? これを回避する方法はありますか?