【发布时间】:2012-07-02 21:38:11
【问题描述】:
假设我有以下三个类/接口:
public interface IImportViewModel
{
}
public class TestImportViewModel : IImportViewModel
{
}
public class ValidationResult<TViewModel> where TViewModel : IImportViewModel
{
}
由于TestImportViewModel实现了IImportViewModel,为什么下面的编译不出来?
ValidationResult<IImportViewModel> r = new ValidationResult<TestImportViewModel>();
我了解错误消息“无法将类型 'ValidationResult' 隐式转换为 'ValidationResult'”的含义。我只是不明白为什么会这样。这不是协方差吗?
【问题讨论】:
-
我假设你的类 TestImportViewModel 应该是 TViewModel? (上面的代码根本没有显示类 TViewmModel)。
-
是的。 TestImportViewModel 实现了 IImportViewModel,因此 应该 可以作为 TViewModel 的 TViewModel 实现使用:IImportViewModel。
-
@Sam TViewmModel(aka
) 是一种 IImportViewModel 它不是一个类。 -
@SamGoldberg,它是通用参数,通常被视为
T,但在这种情况下具有更具描述性的名称。 -
Here is 类似问题的解释。