The MSDN has full information on how inheritance hierarchies work.
You are confusing the use of virtual/override (overriding the function in the parent class) and new (hiding the one in the parent class). Any object cast to class B will have no knowledge of the over-ridden functions in class C if the function is not already declared in a class further up the hierarchy without the use of the virtual keyword.