1. не надо так писать
Ваш вопрос не про полиморфизм... Полиморфное поведение может демонстрировать к примеру функция:
void Foo(IList list) { var bar = list[1]; }
если ожидается, что на вход может приходить не совсем
new List()
, или даже совсем не List, а некое хранилище, которое обеспечивает доступ к элементам по индексу, и ради этого это хранилище реализует IList.
2 ничем не отличается
Разница возникла бы в коде,
Base A;
switch(...)
{
case 0:
A = Derived_1();
break;
case 1:
A = Derived_2();
break;
}
A.Foo();
в точке, где происходит вызов Foo(), тут полиморфизм обеспечивает исполнение разных версий метода для _1() и _2() наследников. В таком коде если бы Вы написали объявление А как в вопросе, case 1: компилятор у Вас забраковал бы, не говоря уже о том, что _2() не исполнялось бы никогда.