オーバーロードされた の次の署名があります+
。
public static double operator +(MyClass x, MyEnum e)
および次の形式の式:
x.Value = someMyClassValue + MyEnum.X;
デバッガーが示す動作は、式が次のようになっている場合と同じです。
x.Value = MyEnum.X;
オーバーロードが呼び出されることはありません。
私も持っています:
public static double operator +(MyClass x, object o)
しかし、それは列挙型に対しても呼び出されませんが、他の場合には呼び出されます。
また、string、int、float、double のオーバーロードもあり、それらはすべて完全に機能します。enum が特殊なケースである理由と、奇妙な動作の理由は何ですか? これは Mono コンパイラのバグでしょうか?
Ubuntu 13.04 で Mono 2.10.8.1 を使用しています。
あとがき
問題は、 への暗黙のキャストも定義していたことint
です。詳細については、私の回答を参照してください。