public abstract class T
{
public abstract IEnumerable<T> MakeOneMove();
public IEnumerable<T> MakeOneMove(string evt)
{
List<T> returnList = new List<T>();
IEnumerable<T> steps = MakeOneMove();
foreach (T step in steps)
{
if (step.Event == evt)
{
returnList.Add(step);
}
}
return returnList;
}
在其他地方,该类的使用如下:
T currentImpl = pendingImpl.Pop();
IEnumerable<T> nextImpl = currentImpl.MakeOneMove();
foreach (ConfigurationBase next in nextImpl){
}
我对两件事感到困惑。似乎类 T 正在被实例化,但类 T 是一个抽象类。我以为这是不可能的。我认为只能实例化抽象类的非抽象子类。另外,在类中,调用了 makeonemove() ,但是没有参数的版本不是没有被覆盖,因此没有定义吗?在我看来,这段代码不应该编译,但它确实可以。