假设我有一个名为Shape的基类,然后有一些子类,比如圆形和正方形。
接下来我们在另一个类中创建一个名为GetShape的方法:
接下来我们在另一个类中创建一个名为GetShape的方法:
public Shape GetShape()
{
return new Circle();
}
好的,那么这个想法是,我可以传入一个形状类型,然后返回一个强类型的形状子类。上面的例子是真实代码的极度简化,但我认为它能够说明问题。
那么当我调用这个方法时,它会是什么样子呢?
var shapeCreator = new ShapeCreator();
Circle myCircle = shapeCreator.GetShape();
唯一的问题是它甚至无法运行,因为它需要一个强制转换。
下面的代码可以正常运行:
Circle myCircle = (Circle) shapeCreator.GetShape();
我对那个类别不是很满意,如何避免使用它并实现一个方法返回基类,以便能够返回任何兼容的子类。
T
的过滤器中添加了Shape
。 - Patrick HofmanshapeCreator.GetShape<Circle>()
相对于new Circle()
的优势究竟是什么呢?即使在从泛型方法shapeCreator.GetShape<T>()
中调用的情况下,它又如何比new T()
更好呢? - Kris Vandermotten