我有一个与这篇文章中的问题类似的问题。
我还看到网上成千上万的帖子说您可以将任何扩展特定基类的泛型类放入基类类型的集合中。我完全理解这一点。
我的问题与上面的链接帖子和其他问题在一个基本方面有所不同——我的泛型类有一个也是泛型的基类。更糟糕的是,这是一个非常大的 MVVM 应用程序框架(内部构建)的一部分,通用基类也有一个基类等等......每个基类都添加了某些属性和功能,看起来有点像这样:
DataListEntry<T> <-- BaseSynchronisableDataType<T> <-- BaseAuditDataType <-- BaseDataType <-- BaseAnimatableDataType
应用程序集合类使用类似的继承:
DataList<T> <-- BaseSynchronisableCollection<T> <-- BaseAnimatableCollection<T> <-- BaseCollection<T> <-- SortableObservableCollection<T>
更糟糕的是,每个泛型声明都有约束,例如,BaseSynchronisableDataType<T> 的定义如下所示:
public abstract class BaseSynchronisableDataType<T> : BaseAuditDataType,
ISynchronisable<T>, ICloneable<T>, IEquatable<T> where T : class, ICloneable<T>,
IEquatable<T>, new()
因此,每个泛型集合类型都通过这些约束绑定到泛型基类。希望到现在为止,您可以看到我的问题的规模。
我尝试使用接口(上面未显示)从集合中删除链接到它们各自的基类,但这也失败了,因为相关类的一些通用约束。例如,我无法创建接口类型的集合,因为某些基类上有必要的通用“类”约束,所以我收到错误说集合的类型“必须是非抽象类型”一个公共无参数构造函数,以便将其用作泛型类型或方法中的参数“T”。
最后一点要注意准确描述了我正在尝试做的事情:
我需要使用所有扩展 DataList<T> 基类的不同类填充集合。这些类仅在名称上有所不同,并且具有完全相同的属性。它们声明如下:
public class Writer : DataListEntry<Writer>
public class Artist : DataListEntry<Artist>etc.
如果您有任何想法,请告诉我……我已经为这个问题苦恼了 2 天,我的老板很不高兴!非常感谢,谢里登。