我有一个通用类:
public abstract class ModelSet<T> : ObservableCollection<T>, IModelObject where T : ModelObject, new(){
public static ModelSet<T> Lookup(long pObjectId){
return (ModelObjectMap.Get(pObjectId) as ModelSet<T>);
}
}
我使用定义为:
的类Movement进行了以下类的类实例化class Movement : ModelObject.
public partial class Movements : ModelSet<Movement>
由于
,以下代码无法编译无法将
ModelSet<Movement>
类型隐式转换为Movements
。存在显式转换。
Movements X = Movements.Lookup(12345);
当然,他们是一样的。我做错了什么?
答案 0 :(得分:1)
当然,他们是一样的。
不,他们不一样。一个是Movements
,另一个是ModelSet<Movement>
。虽然每个Movements
实例都是ModelSet<Movement>
的实例,但它的完全可能有一个ModelSet<Movement>
,而不是Movements
} ...并且您的方法的返回类型仅表示它将返回ModelSet<T>
。
我们不知道ModelObjectMap.Get(pObjectId)
实际上做了什么,但它肯定会返回ModelSet<Movement>
个实例,而不是Movements
。
我们不知道您需要对返回值做什么,但您当然可以写:
ModelSet<Movement> X = Movements.Lookup(12345);
......虽然值得注意的是Movements
班级实际上并没有参与该电话会议;它实际上会被编译为:
ModelSet<Movement> X = ModelSet<Movement>.Lookup(12345);