为什么 IComparable<T> 不继承自 IComparable?

And*_*hov 5 c# interface icomparable contravariance comparable

IComparable在大多数地方,我读到从类和类中继承是一个好主意,IComparable<T>以提供与非泛型集合的兼容性。我的问题是为什么默认情况下IComparable<T>不继承呢?IComparable通过这种方式可以实现向后兼容性。

例如,IEnumerable<T>是否继承自IEnumerable,那么为什么不使用 做同样的事情呢IComparable?我读到了有关差异的内容,但我仍然不太明白为什么要这样设计。我尝试创建一个具有相同架构的接口的小示例,并且它按预期工作。

编辑:此外,Microsoft 文档指出以下内容:如果泛型接口是逆变的,则泛型接口可以从非泛型接口继承,这意味着它仅使用其类型参数作为返回值。在 .NET Framework 类库中,IEnumerable<T>继承自IEnumerable,因为仅在属性 getterIEnumerable<T>的返回值GetEnumerator和属性 getter 中使用 T。Current

但尽管如此,我们仍然可以很好地继承IComparableIComparable<T>如果您创建具有相同架构的接口)。

mie*_*ooy 0

自己尝试一下,如果没有指定类型,那么实现泛型接口的类也需要实现默认类型方法

    public interface IFoo
    {
        void Foo(object o);
    }

    public interface IFoo<T> : IFoo
    {
        void Foo(T o);
    }
Run Code Online (Sandbox Code Playgroud)

变成

public class Foo : IFoo<int>
    {
        void IFoo<int>.Foo(int o)
        {
            throw new System.NotImplementedException();
        }

        void IFoo.Foo(object o)
        {
            throw new System.NotImplementedException();
        }
    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您用一种方法实现一个接口,并且似乎您必须实现从类型化接口继承的两种方法