【发布时间】:2018-06-12 15:54:03
【问题描述】:
简介:我正在创建一个 MVC 应用程序,我需要在其中显示各种类型的文档,其中一些包含比其他更多的作者信息。
我想做的事:我的方法是有一个通用的“查看文档”视图,它以传递给它的对象的形状/类型规定的格式动态显示文档。
示例:一个简单的文档将被加载到 SimpleDocumentViewModel 中,并显示为这样。但是,我想将更大类型的文档加载到 ExtendedDocumentViewModel 中,并附带有关文档和作者的附加信息。然后,视图将根据其接收到的对象显示适当的数据。
我现在所处的位置:本着这种精神,我创建了以下接口和类,但我不知道如何在其派生中返回/识别更具体的返回类型类。
abstract class BaseDocumentViewModel : DocumentViewModel, IDocumentViewModel
{
public int DocumentId { get; set; }
public string Body { get; set; }
public IAuthorViewModel Author { get; set; }
}
class SimpleDocumentViewModel : BaseDocumentViewModel
{
}
class ExtendedDocumentViewModel : BaseDocumentViewModel
{
public new IAuthorExtendedViewModel Author { get; set; }
}
interface IAuthorViewModel
{
int PersonId { get; set; }
string Name { get; set; }
}
interface IAuthorExtendedViewModel : IAuthorViewModel
{
int ExtraData { get; set; }
int MoreExtraData { get; set; }
}
问题:所以我的问题是;如何最好地从完全实现的类中获取特定类型,或者我是否需要返回基本类型并在视图中全部查询?还是我疯了,需要回到绘图板上?
编辑:
我知道c# doesn't support return type covarience,但希望可能有另一种方法来返回/识别派生类型,这样我就不必在视图中查询它们。
我当前的解决方案是始终返回基本类型,并为每个具体类型提供一个单独的视图,该视图只是将每个对象转换为正确的类型,只查询可能不同的那些。或许这是最好的解决方案结束了,但感觉很不雅。
【问题讨论】:
标签: c# asp.net-mvc inheritance polymorphism covariance