实现一个接口方法,获取接口或基础 class 的 IEnumerable 作为参数

Implement an interface method that gets IEnumerable of interface or of base class as parameter

[类似的问题之前肯定被问过很多次了,但不知为何找不到合适的副本,所以打开这个]

一般:

是否有可能实现一个接口方法,它获取接口或 base-class 的 IEnumerable 作为类型参数,其中实现方法 IEnumerable 使用类型-class 的参数,它从基础 class?

实现 interface\derives

更具体地说:

这样的实现会引发错误:

<class> does not implement interface member <method with IEnumerable of interface\base-class>

完整示例:

用作 IEnumerable 类型参数的类型(此处使用 IZ,但 CZ 的行为方式应相同):

interface IZ {}
class CZ1 : IZ {}
class CZ2 : IZ {}

尝试使用类型参数的类型:

interface IA
{
    void Set(IEnumerable<IZ> records)
}

class CA1 : IA 
{
    public void Set(IEnumerable<CZ1> records) {}  <-- compile error
}

class CA2 : IA
{
    public void Set(IEnumerable<CZ2> records) {}  <-- compile error
}

像这样?

interface IZ { }
class CZ1 : IZ { }
class CZ2 : IZ { }

interface IA<T> where T : IZ
{
    void Set(IEnumerable<T> records);
}

class CA1 : IA<CZ1>
{
    public void Set(IEnumerable<CZ1> records) { }
}
class CA2 : IA<CZ2>
{
    public void Set(IEnumerable<CZ2> records) { }
}