Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C从派生接口中的继承接口专门化泛型接口_C#_Generics_Inheritance_Interface - Fatal编程技术网

C# C从派生接口中的继承接口专门化泛型接口

C# C从派生接口中的继承接口专门化泛型接口,c#,generics,inheritance,interface,C#,Generics,Inheritance,Interface,我想不出更好的标题,所以我将尝试用一个例子来解释: 我有两节课。一个来源于另一个: public class Base { } public class Derived : Base { } 和两个接口。同样,其中一个派生自另一个,并且都实现了两个类之一的枚举: public interface BaseEnumeration : IReadOnlyList<Base> { } public interface DerivedEnumeration : BaseEnumerat

我想不出更好的标题,所以我将尝试用一个例子来解释:

我有两节课。一个来源于另一个:

public class Base { }

public class Derived : Base { }
和两个接口。同样,其中一个派生自另一个,并且都实现了两个类之一的枚举:

public interface BaseEnumeration : IReadOnlyList<Base> { }

public interface DerivedEnumeration : BaseEnumeration, IReadOnlyList<Derived> { }
虽然我必须在DerivedEnumerator中实现两次GetEnumerator,但是当我尝试使用它们的函数时,编译器抱怨两个接口之间存在歧义

我已经尝试创建一个通用的基本接口,但是我无法从其他派生接口转换到派生接口


那么我该如何解决这个问题呢?

您试图解决这个问题的方法无论如何都不会奏效。。首先让我说,有点奇怪,你需要在一个单一的类型定义中收集基类和派生类。。但我不会专注于那部分,因为那是你的。无论什么要枚举基集合和派生集合,需要在接口中明确定义它们,如下所示

public interface IBaseEnumeration {
    IReadOnlyCollection<Base> BaseCollection { get; }
}

 public interface IDerivedEnumeration : IBaseEnumeration {
    IReadOnlyCollection<Derived> DerivedCollection { get; }
}
但是,派生自Base的事实将导致只使用第一个接口IBaseEnumeration:IReadOnlyCollection的解决方案,因为Base覆盖了这两种实例类型