2

オーバーロードされた の次の署名があります+

    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です。詳細については、私の回答を参照してください。

4

1 に答える 1