Метод перегрузки разрешает неожиданное поведение
Я борюсь со странным, по крайней мере для меня, методом перегрузки разрешением .net. Я'Мы написали небольшой образец, чтобы воспроизвести проблему:
class Program
{
static void Main(string[] args)
{
var test = new OverloadTest();
test.Execute(0);
test.Execute(1);
Console.ReadLine();
}
}
public class OverloadTest
{
public void Execute(object value)
{
Console.WriteLine("object overload: {0}", value);
}
public void Execute(MyEnum value)
{
Console.WriteLine("enum overload: {0}", value);
}
}
public enum MyEnum
{
First = 1, Second = 2, Third = 3
}
Распечатает:
enum overload: 0
object overload: 1
В основном вызванная перегрузка отличается в зависимости от значения (0, 1) вместо заданного типа данных.
Может кто-нибудь объяснить?
Обновить
Я должен был указать, что тамразличное поведение между C # 2 и C # 3
Do((long)0) => object overload //C# 2
Do((long)0) => enum overload //C# 3