【发布时间】:2011-08-11 23:26:03
【问题描述】:
我有一个案例,我有一些类,每个类都处理一种令牌。它们都来自一个基本的处理程序类(稍微简化了一点,所以请原谅任何反编译的错别字):
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+。
【问题讨论】:
标签: c# class list types reference