我有课:
public class Throw
{
public double speed { get; set; }
public double accurency { get; set; }
}
public class FastThrow : Throw{}
public class LowThrow : Throw{}
而不是:
public static FastThrow SetFastThrow(List<object> args)
{
return new FastThrow
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
public static LowThrow SetLowThrow(List<object> args)
{
return new LowThrow
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
我想有一个父类:
public static Throw SetThrow(List<object> args)
{
return new Throw
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
声明带有父类实例的子类的列表或其他一些通用接口。然后向现有集合添加新元素。我知道下面的例子有编译错误,但它应该是这样的:
List<List<object>> firstList = new List<List<object>>();
public void Main()
{
IList<FastThrow> secondList = new List<Throw>();
foreach (var item in firstList)
{
secondList.Add(SetThrow(item));
}
}
我读过逆变,不知道这是否可能。
你不能。而不是
声明带有父类实例的子类的列表或其他一些通用接口。
你应该
用带有儿童类实例的父类声明列表或其他一些通用接口。
第二种方式,正如 Anirban 所说,使用泛型类,如下重构你的SetThrow
方法:
public static T SetThrow<T>(List<object> args) where T : Throw, new()
{
return new T
{
speed = (double)args[0],
accurency = (double)args[1]
};
}
这样你就可以SetThrow
只使用方法来生成不同种类的类,只要它们是子类。例如:
IList<FastThrow> secondList = new List<FastThrow>();
foreach (var item in firstList)
{
secondList.Add(SetThrow<FastThrow>(item));
}
泛型类是强类型的,使用起来很优雅。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句