对于相同类型的不同值,为什么C#调用对于重载方法不同?

时间:2010-03-25 12:58:43

标签: c# enums overloading

我对c#方法重载和调用解析有一个疑问。

假设我有以下C#代码:

enum MyEnum { Value1, Value2 }

public void test() {
    method(0); // this calls method(MyEnum)
    method(1); // this calls method(object)
}

public void method(object o) {
}

public void method(MyEnum e) {
}

请注意,我知道如何使它工作,但我想知道为什么一个int(0)值调用一个方法而另一个(1)它调用另一个方法。这听起来很尴尬,因为两个值具有相同的类型(int),但它们是“链接”的不同方法。

4 个答案:

答案 0 :(得分:8)

文字0可隐式转换为任何enum类型,与object的匹配程度更接近。 Spec

例如,请参阅这些blog posts

答案 1 :(得分:1)

我非常肯定会打电话给

public void method(MyEnum e) {
}

您需要传递MyEnum.Value1MyEnum.Value2。枚举!= int类型,因此必须将int转换为枚举类型。因此(MyEnum)1(MyEnum)0可以正常使用。

在你的情况下,0被隐式地强制转换为你的枚举类型。

答案 2 :(得分:1)

已经回答here

答案 3 :(得分:1)

Why does C# allow implicit conversion of literal zero to any enum?是一个很好的参考,JaredPar在其中有很好的答案。