Down, up, super and base

Sometimes the programming language is determining the perspective. Last week I read the definition of downcasting on Wikipedia:

In object-oriented programming , downcasting or type refinement is the act of casting a pointer or a reference to a base class to one to a derived class.

I think this sentence is not very lucky, because if you read it for the first time, it is not clear why downcasting is not called upcasting (and vice versa). Casting from a base class to one to a derived class gives me the impression to go up and not down.

Generally it seems to me that understanding the terms upcasting and downcasting is much easier in Java or X++ then in C# because of the keyword super. Super is related to the Greek word hyper and means above. This is the complete opposite to the keyword basein C# which Latin origin means low . The following graphic illustrates this difference:

Reading directions

Now back to the downcasting explanation, you see, that the term downcasting isn't an ergonomic term for a C# developer:

downcasting

I'd like to know what C# developers are thinking about this.