1

似乎在 C# 4.0 中,方差说明符仅适用于接口类型。

所以假设我有 ViewModel / EditModel 类和一个简单的模型层次结构。

class MyEditModel<T> where T : Base { ... }
class Derived1 : Base { ... }
class Derived2 : Base { ... }

我有一个局部视图,它接受任何类型的 MyEditModel(只要它是从 Base 派生的)和另一个只接受 Derived1 实例的视图。现在如何在同一页面上呈现两者?

接受任何 MyEditModel 的局部视图将在 Derived1 的编辑器和 Derived2 的编辑器之间共享。

4

1 回答 1

1

如果您的视图接受 Base 的视图模型,您唯一可以这样做。从 OO 的角度来看,MyEditModel 和 Derived1 共享 Base 作为公共基类 - 但它们不共享任何其他内容 - 没有其他关系。因此,如果您尝试使用相同的,那么它必须从 Base 派生。大概 Base 上的属性是它们唯一的共同点。

编辑:我误解了原来的问题。根据您问题的文字,我认为您正在通过 Derived1 但根据您在下面的评论,您正在通过MyEditModel<Derived1>。这将满足您的要求:

Inherits="System.Web.Mvc.ViewPage<dynamic> 

您没有获得动态智能感知的好处 - 但您确实获得了为您的类型重用相同视图文件的好处,并且不必为了让编译器满意而创建额外的视图模型类的好处。

于 2010-10-08T03:18:03.630 回答