为什么不能将MediaItem强制转换为SecureMediaItem?

Exi*_*tos 0 c# wcf

我有课:

    [DataContract]
    public class MediaItem : Video
    {
        //used to protect calling api from the incorrectly named video
    }

    [DataContract]
    public class SecureMediaItem : MediaItem
    {
        [DataMember]
        public PlayerEmbedToken Token;
    }
Run Code Online (Sandbox Code Playgroud)

然后我有以下代码:

List<MediaItem> dummyItems = new List<MediaItem>();

 //cast the media item into a secure media item
SecureMediaItem retItem = (SecureMediaItem)dummyItems[mediaId];

//TODO: put in the Admin ID
retItem.Token.UserId = 1;
retItem.Token.IpAddress = VLSCore2.VlsSecurity.ParseIpFromString(ipAddress);
retItem.Token.UniquePlayerRef = Guid.NewGuid().ToString();


return retItem;
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误:

无法将类型为"VLSCore2.Entities.Security.Api.MediaItem"的对象强制转换为"VLSCore2.Entities.Security.Api.SecureMediaItem".

这只是一个广泛的演员,不是吗?像DataContract属性那样停止它的东西?

Dan*_*rth 5

不,这与扩大的演员阵营相反.SecureMediaItem比具体更具体MediaItem.你可以把a转换SecureMediaItem为a MediaItem,因为a SecureMediaItem是a MediaItem.反过来说不起作用,因为a MediaItem不一定是SecureMediaItem.