我有一个班级
class Video
{
public string name;
public string description;
}
因为它通过WCF接口公开,我想重命名它(业务对象现在已被修改为封装音频和图像以及视频)。
所以我的解决方案是编写另一个继承自它的类:
class MediaItem : Video
{
}
我们有一个类似“工厂”的类,可以从数据库中获取视频。
public Video GetVideo(int videoId)
{
}
但是,当我打电话给以下人员时:
MediaItem itemToReturn = (MediaItem)contentManagerforPage.GetVideo(mediaId);
我收到错误:
无法将“视频”类型的对象转换为“MediaItem”。
我明白我不能这样做(将基类强制转换为子类)。那么解决方案是什么?
我无法通过WCF公开类名'Video',我需要公开MediaItem。是否有任何OO方法来解决这个问题(或许使用接口)?
如果不能,我可以在WCF属性中重命名对象吗?
答案 0 :(得分:6)
Video
应该继承自MediaItem
,而不是相反。
您可以使用[DataContract(Name="YourName")]
修饰该类,以提供您在代码中使用的其他名称。
答案 1 :(得分:0)
给定类型的数据协定的默认名称是该类型的名称。要覆盖默认值,请将DataContractAttribute的Name属性设置为备用名称。
[DataContract(Name = "MyMediaItem")]
答案 2 :(得分:0)
或者您可以Video
继承MediaItem
并使MediaItem
摘要。然后使用类定义上的KnownType
属性来指定实现。
请参阅here了解详情