Check out the following code:
private void Foo(object bar) { Type type = bar.GetType(); if (type != null) // Expression is always true { }
GetType is not virtual. Your assumption is most likely correct in your last statement.
GetType
virtual
Edit: to answer your comment question - it can't infer with your methods out of the box.