可能重複:
Casting List<T> - covariance/contravariance problem返回抽象類的列表
我定義如下
public abstract class AbstractDType
{
protected abstract string Num1 { get; set; }
protected abstract string Num2 { get; set; }
}
public class AD1 : AbstractDType
{
public string Num1 { get; set; }
public string Num2 { get; set; }
public string Num3 { get; set; }
}
public class AD2 : AbstractDType
{
public string Num1 { get; set; }
public string Num2 { get; set; }
public string Num3 { get; set; }
}
public abstract class DTypeStrategy
{
protected virtual List<AbstractDType> GetData()
{
return new List<AD1>();
}
}
類我想回PD1的列表(具體類型)在GetData()方法中。但是,上面的代碼拋出了一個鑄造錯誤。 List<AbstractDType>
無法轉換爲List<PD1>
。如何修復這個錯誤,以便我可以在GetData方法中返回具體值。
有從DTypeStrategy繼承其他派生類這將是實現的GetData(),如如下:(我假設我會在這裏得到同樣的錯誤鑄件以及)
public class MyDraw : DTypeStrategy
{
public override List<AbstractDType> GetData()
{
return new List <AD2>();
}
}
我正在使用策略模式來創建基於typeID的具體對象。每個具體對象的GetData()方法都會返回一個特定的列表,如AD1,AD2或AD3的列表。從AbstractDType繼承的AD1,AD2和AD3。 DTypeStrategy將具有默認行爲的GetData()方法。 – 2011-05-09 12:05:47
@Alan B在戰略模式中,調用策略的代碼不需要知道具體的List GetData是什麼返回的,所以最上面的代碼片段就是你想要的 - 從抽象中創建列表並添加實例它的子類。 – 2011-05-09 19:30:10