在基类上具有where约束的泛型类,但只允许派生类

本文关键字:许派生 派生 基类 where 泛型类 约束 | 更新日期: 2023-09-27 18:01:18

我有一个类MediaCollection<T>,它表示歌曲、视频或图片的播放列表。我也有三个类:Song, VideoPicture,它们都继承自AMediaElement抽象类。我的MediaCollection<T>类有以下约束:

class MediaCollection<T>
    where T : AMediaElement, new()
{
}

这允许我收集歌曲,图片,视频,以及任何AMediaElement !

如何防止创建类型为MediaCollection<AMediaElement>的对象?我可以使MediaCollection抽象,然后使其他三个类SongCollection, PictureCollectionVideoCollection,但我更喜欢使用where子句的解决方案。

在基类上具有where约束的泛型类,但只允许派生类

事实证明它是有效的。我通过创建List<AMediaElement>对象而不是MediaCollection<AMediaElement>来测试它是错误的。因为我的where子句指定了new(),所以我不能使用我想要的抽象类AMediaElement

我知道我按提问键的速度太快了