132 voteszeblon commented
Change the wording to what the interface actually represents and it’s easier to see the “is a” relationship. An IReadOnlyList represents a list with read capabilities, so for the sake of this discussion lets rename it IListWithReadCapabilities. An IList *absolutely* “is a” IListWithReadCapabilities. The .NET team has stated elsewhere that the only reason IList doesn’t inherit from IReadOnlyList is because it would break existing code that implements IList. It’s unfortunate, as it severely limits the usefulness of IReadOnlyList.