簡體   English   中英

通用超類和類型不匹配

[英]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> 那么這將是法律在其他一些實施的傳遞IMyModelProcess ,這是預計只有 MyFirstModel並可能可怕的失敗。

我怎么能修改它,以便修復上述代碼的問題?

您唯一能做的就是將其聲明為BaseClass<MyFirstModel>

BaseClass<MyFirstModel> Temp = new MyFirstsubClass();

不知道BaseClass<T>做了什么;不可能知道是否有合理的方法將其轉換為BaseClass<IMyModel>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM