According to CSharp Language Specification.
An interface defines a contract that can be implemented by classes and structs. An interface does not p
You need 13.4.4 from the specification:
For purposes of interface mapping, a class member
A
matches an interface memberB
when:•
A
andB
are properties, the name and type of A and B are identical, and A has the same accessors asB
(A
is permitted to have additional accessors if it is not an explicit interface member implementation).
Additionally, your belief that List
satisfies the contract of IEnumerable
is false. Even if the specification were somehow relaxed to not require that the return types be identical, note that a property of type List
with a public setter is not anywhere near the same as a property of type IEnumerable
with a public setter because to the latter you can assign an instance of int[]
, but to the former you can not.