This is all about
assignment compatibility of types related through inheritance. It does not matter if a base type is an interface or a class, it does not matter if the base is direct or indirect base.
Given a type
A
is a base type for a type
B
:
class B : A {}
A a =
B b =
a = b;
It should be clear why: the
compile-time type of
b
allows to use some members additional to the type
A
. If second assignment was possible, the attempt to access such member of
b
would be a disaster, because in actual
run-time type of
b
which actually would be
A
this member does not exist. The opposite situation (first assignment) does not create any problems.
The conclusion should be apparent to you by now.
—SA