Резюме для программиста
Но что самое интересное, правильный ответ может зависеть от версии компилятора. Вот здесь Overloading (csharpindepth.com) Джон Скит пишет
The C# 3 compiler will pick the overloadFoo(object x)
. The C# 4 compiler, when targeting .NET 3.5, will pick the same overload - becauseIEnumerable<T>
isn't covariant in .NET 3.5. The C# 4 compiler, when targeting .NET 4, will pick the Foo(IEnumerable) overload, because the conversion to that is better than the conversion toobject
. This change occurs with no warnings of any kind.
Даже не вдаваясь в подробности, относительно какого примера это написано, уже понятно, что самый-самый правильный ответ на такие "каверзные задачки" - это сначало уточнение версии компилятора. А экзаменующий должен быть поражен вашими энциклопедическими знаниями - мол, надо же, чувак постоянно держит в голове не только всю "магию" наследования с кучей правил и оговорок, но ещё и для всех версий компилятора. Надо его брать - у нас тонны говнокода на разных версиях фреймворка, включая доисторические, которые никто не будет переводить на новые. А такой умник как раз для такой работы подойдёт.
Вывод: если знать слишком много, можно получить почётную работу по разгребанию застарелого дерьма со знанием различий версий компиляторов. Пока джуниоры будут говнокодить на новом, модном, современном. )))
Перейти на |