Say you have a Base class and a derived class. Unless I'm mistaken, the following code is validBase base=new Derived;
Precisely. This is the main reason that prevents type declarations from being eradicated entirely in statically typed languages. Even "var" and "auto" are picking a specific static type. They just allow you to use them to reduce typing.
If you use C#, use 'var' to reduce redundant typing, ESPECIALLY for long types like Dictionary<string,object>. But don't forget that being able to designate a variable's type manually when you need to is also very important.