【发布时间】:2013-05-22 18:16:41
【问题描述】:
对于重载的+,我有以下签名:
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。详情见我的回答。
【问题讨论】:
-
在 Linqpad 中运行良好。
-
没有回购。我编写了一个简单的程序并运行它(不是在单声道上),它按预期工作。要么是您未显示的某些代码中存在错误,要么您没有正确观察结果,或者它确实是一个单错误。
-
可能是因为枚举可以声明为不同的类型。例如,在 VB 中,您可以将枚举声明为字节、整数、短整型、长整型等。编译器不知道该枚举的预期类型。
-
@ps2goat:那不会有任何区别。
-
@ps2goat 注意操作数不是
Enum,意思是任何枚举,它是一个特定的枚举类型。不管怎样,就算是Enum,也没关系。
标签: c# enums mono operator-overloading