多くの継承クラスから派生した抽象基本クラスがあります。私がやりたいのは、静的メンバーが文字列を受け取ります。これは、文字列を解析できる最初のクラスであり(継承されたクラスの1つだけが解析できるはずです)、継承されたクラスのインスタンスを返します。
これは私が現在行っていることです。
public static Epl2Command GenerateCommandFromText(string command)
{
lock (GenerateCommandFromTextSyncRoot)
{
if (!Init)
{
Assembly a = Assembly.GetAssembly(typeof(Epl2Command));
Types = new List<Type>(a.GetTypes());
Types = Types.FindAll(b => b.IsSubclassOf(typeof(Epl2Command)));
Init = true;
}
}
Epl2Command ret = null;
foreach (Type t in Types)
{
MethodInfo method = t.GetMethod("GenerateCommand", BindingFlags.Static | BindingFlags.Public);
if (method != null)
ret = (Epl2Command)method.Invoke(null, new object[] { command });
if (ret != null)
break;
}
return ret;
}
私のコードが、将来のプログラマーが戻ってきて、継承されたクラスを追加するときにこの関数を編集することなく、すべての継承されたクラスをチェックするようにしたいと思います。
継承されたクラスに独自のクラスを実装させる方法はありGenerateCommand(string)
ますか?
public static abstract Epl2Command GenerateCommand(string command)
有効なc#ではありません。または、ハンマーを使用する必要があるときに、靴で釘を打ち込みますか。このクラスファクトリを実行するためのより良い方法をいただければ幸いです。