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){
}
私は2つのことについて混乱しています。クラス T がインスタンス化されているようですが、クラス T は抽象クラスです。これはありえないと思いました。抽象クラスの非抽象サブクラスのみがインスタンス化できると考えていました。また、クラス内で makeonemove() を呼び出していますが、引数のないバージョンはオーバーライドされていないため定義されていないのではないでしょうか? このコードはコンパイルされないように思えますが、それでもコンパイルされます。