See the C# 4.0 Specification ( https://www.microsoft.com/en-us/download/details.aspx?id=7029 )
7.4 Member lookup
First, a set of accessible members named N is determined:
If T is a type parameter, then the set is the union of the sets of accessible members named N in each of the types specified as a primary constraint or secondary constraint (§10.1.5) for T, along with the set of accessible members named N in object.
Otherwise, the set consists of all accessible (§3.5) members named N in T, including inherited members and the accessible members named N in object. If T is a constructed type, the set of members is obtained by substituting type arguments as described in §10.3.2. Members that include an override modifier are excluded from the set.
I don't understand that behavior, but this is in the specification, so it is correct, even if a bit disturbing (and I have a C++ background)...
Edit:
This is indeed a duplicate question (as correctly discovered by Anders Abel in his comment).
See the original Overload resolution and virtual methods for an explanation for this behavior.