我有一個抽象基類,我有很多繼承類來。我想要做的是靜態成員需要一個字符串,第一個類可以解析字符串(只有一個繼承類應該可以)並返回繼承類的實例。使用基類的靜態方法實例化一個繼承類
這就是我目前正在做的。
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#。 Or am I hammering a nail in with a shoe when I should be using a hammer;任何更好的方式做這個類工廠將不勝感激。
Jon Skeet在靜態界面上的文章。 http://goo.gl/WPpV – 2010-04-14 14:47:45
承辦人從哪裏來? – 2010-04-14 14:52:21
它是pseduo代碼,假設你使用控制容器的反轉... Windsor,StructureMap等。如果你不使用IoC,你必須找到所有ICommandBuilder類型並手動實例化它們。 – 2010-04-14 18:03:23