[英]Generic Superclass and type mismatch
我有一個通用的基類:
public abstract BaseClass<T> where T: IMyModels {
...
}
還有一個子類:
public class MyFirstsubClass: BaseClass<MyFirstModel> {
...
}
這些是接口和模型:
public interface IMyModel {} // Empty Interface
public MyFirstModel: IMyModel {
// Some automatic properties
}
由於MyFirstClass
擴展為其類型實現IMyModel
接口的BaseClass,下面的代碼必須正常,但visual studio顯示“無法隱式轉換類型”錯誤,當我進行顯式轉換時,它表示無法顯式轉換類型。
BaseClass<IMyModel> Temp = new MyFirstsubClass();
在這個結構中有什么好處,我怎么能修改它以便修復上面代碼的問題?
由於
MyFirstClass
擴展為BaseClass
其類型實現了IMyModel
接口,因此下面的代碼必須正常
不, BaseClass<MyFirstModel>
不是 BaseClass<IMyModel>
因為默認情況下泛型類不是協變的。 假設你有一個方法:
public void Process(T model)
{
...
}
對於BaseClass<MyFirstModel>
此方法被編譯為
public void Process(MyFirstModel model)
{
...
}
現在假設您可以將其BaseClass<IMyModel>
轉換為BaseClass<IMyModel>
。 那么這將是法律在其他一些實施的傳遞IMyModel
來Process
,這是預計只有 MyFirstModel
並可能可怕的失敗。
我怎么能修改它,以便修復上述代碼的問題?
您唯一能做的就是將其聲明為BaseClass<MyFirstModel>
:
BaseClass<MyFirstModel> Temp = new MyFirstsubClass();
不知道BaseClass<T>
做了什么;不可能知道是否有合理的方法將其轉換為BaseClass<IMyModel>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.