c#对派生接口中继承接口的泛型接口进行专门化
本文关键字:接口 泛型接口 专门化 继承 派生 | 更新日期: 2023-09-27 18:15:57
我想不出一个更好的标题,所以我想用一个例子来解释:
我有两个类。一个源自另一个:
public class Base { }
public class Derived : Base { }
和两个接口。同样,一个派生于另一个,并且都实现了两个类之一的枚举:
public interface BaseEnumeration : IReadOnlyList<Base> { }
public interface DerivedEnumeration : BaseEnumeration, IReadOnlyList<Derived> { }
它编译得很好(尽管我必须在DerivedEnumeration中实现两次GetEnumerator),但是当我试图使用它们的函数时,编译器抱怨两个接口之间的歧义。
我已经尝试创建了一个泛型基接口,但是无法从更远的派生接口强制转换为派生接口。
那么我该如何解决这个问题呢?
你试图解决这个问题的方式是行不通的。首先让我说,这有点奇怪,你需要在一个类型定义中收集Base
类和Derived
类。但我不会把重点放在那部分,因为那是你的。无论. .要枚举Base
和Derived
集合,您需要在接口中显式地定义它们,如下所示:
public interface IBaseEnumeration {
IReadOnlyCollection<Base> BaseCollection { get; }
}
public interface IDerivedEnumeration : IBaseEnumeration {
IReadOnlyCollection<Derived> DerivedCollection { get; }
}
,但Derived
源自Base
的事实将导致只使用第一个接口IBaseEnumeration : IReadOnlyCollection<Base>
的解决方案,因为Base
涵盖了两种实例类型。