首页 > 解决方案 > 为什么 IComparable从 IComparable 继承?

问题描述

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

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

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

但尽管如此,一个人可以很好地继承(如果你创建具有相同架构的接口,那就是)IComparableIComparable<T>

标签: c#interfacecomparablecontravarianceicomparable

解决方案


如果未指定类型,请自行尝试,然后实现泛型接口的类也需要实现默认类型方法

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

    public interface IFoo<T> : IFoo
    {
        void Foo(T o);
    }

这变成

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

        void IFoo.Foo(object o)
        {
            throw new System.NotImplementedException();
        }
    }

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


推荐阅读