我有一個情況,我有一些類,每個類都處理一個令牌。他們都從一個基本處理程序類下降(簡化了一點,所以請原諒任何反編譯錯別字):如何聲明類型列表,並稍後實例化?
public abstract class TokenClassBase
{
public static bool HandlesTokenType(TokenKind AType)
{
return handledTokens.Contains(AType);
}
protected virtual void HandleToken(AToken)
{
}
}
public class TokenClass1 : TokenClassBase
{
public static new bool HandlesTokenType(TokenKind AKind)
{
return AKind == TokenKind.type1;
}
public override void HandleToken(AToken)
{
//do some work
}
}
// public class TokenClass2... etc
我也有一個工人階級,我想存儲這些處理程序的列表,並後來實例化處理的一個處理令牌:
public class MyWorker
{
private List<Type> handlers;
public MyWorker()
{
handlers = new List<Type>;
handlers.Add(typeof(TokenClass1));
handlers.Add(typeof(TokenClass2));
//... etc
}
protected virtual void HandleToken(AToken)
{
foreach (TokenBaseClass handler in handlers)
{
if (handler.HandlesToken(AToken))
{
instantiate(handler);
handler.HandleToken(AToken);
break;
}
}
}
}
我的問題是,我該如何處理最後的foreach?這甚至是可能的 - 還是有更好的方法?我喜歡將來可以添加新類型的擴展性,只需將它們添加到處理程序列表(或者甚至從外部傳遞它們)即可。 我正在使用C#,框架3.5+。
你也可以讓處理程序實現ICloneable(如果你想根據'serivce請求'克隆一個實例) – sehe 2011-04-24 19:31:42
@sehe:是的,但你仍然需要一個實例列表,而不是一個類型列表。 – 2011-04-24 19:34:50
啊哈,我誤解了你的評論,並且認爲這些類型已經被他們的實例存儲了。讀得太快了,斯里。仍然ICloneable環在這裏主題:) – sehe 2011-04-24 19:37:53