假设我有一个名为Shape的基类.然后是一些子类,如圆形和方形.
然后让我们在另一个名为GetShape的类中创建一个方法:
public Shape GetShape()
{
return new Circle();
}
Run Code Online (Sandbox Code Playgroud)
好吧,所以我的想法是,我可以传入一个shapeType,然后返回一个强类型的Shape子类.上面的例子是对实际代码的大规模简化,但我认为它得到了重点.
那么当我调用这个方法时它会是什么样子
var shapeCreator = new ShapeCreator();
Circle myCircle = shapeCreator.GetShape();
Run Code Online (Sandbox Code Playgroud)
唯一的问题是它甚至不会运行,因为它需要一个演员表.
这实际上有效:
Circle myCircle = (Circle) shapeCreator.GetShape();
Run Code Online (Sandbox Code Playgroud)
关于那个演员,我并不狂热,我怎么能避免它,并且仍然有办法让一个方法返回一个基类,这样我就可以返回任何兼容的子类.
即使没有反射,您也可以使用泛型.此示例使用无参数构造函数过滤器T(从Adil更改的样本):
public T GetShape<T>() where T : Shape, new()
{
return new T();
}
Run Code Online (Sandbox Code Playgroud)