Неоднозначная перегрузка методов

Эта проблема снова застала меня врасплох. Не мог бы кто-нибудь дать техническое объяснение, почему следующий код не выдает никаких предупреждений или ошибок. Вопрос, который вы должны задать себе, - это (конечно же) чувствуете ли вы себя счастливчиком?

class Program
{
    static string Feeling(object o) { return "Lucky"; }
    static string Feeling(string s) { return "Unlucky"; }

    static void Main(string[] args)
    {
        Console.WriteLine("I feel " + Feeling(null));
    }
}

Бонусные очки начисляются, если вы знаете, какой метод будет вызван без выполнения кода. И, чтобы добавить оскорблений, это происходит не только с нулевыми параметрами:

class Program
{
    static string Feeling(int i) { return "Lucky"; }
    static string Feeling(uint i) { return "Unlucky"; }

    static void Main(string[] args)
    {
        Console.WriteLine("I feel " + Feeling(7));
    }
}
6
задан adelphus 26 January 2012 в 11:17
поделиться