我有一个抽象基类,其中有许多继承的类。我想做的是一个静态成员接受一个字符串,第一个可以解析字符串的类(只有一个继承的类应该能够)并返回继承类的实例。
这就是我目前正在做的事情。
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#。或者当我应该使用锤子时,我是在用鞋钉钉子吗?做这个类工厂的任何更好的方法将不胜感激。