我想创建一个将Type映射到Action的Dictionary,但我希望键是来自特定父类的类型。所以我想做一些类似的事情:
class Container
{
private Dictionary<Type, Action> dict;
public void AddAction(Type t, Action a) where t : typeof(SomeParentClass)
{
dict[t] = a;
}
}其中,AddAction方法只接受作为某个特定类的子类的类类型的t的值。我在java语言中见过用extends关键字做这样的事情,但我不知道如何在C#中做到这一点,如果这是可能的话。
Edit:为了澄清,我不希望AddAction方法获取SomeParentClass的实例,而是SomeParentClass的子类的类的类型。有没有比使用类型更好的方法呢?
编辑:我主要想做的是创建一个调度服务,其中应用程序的不同部分可以注册对事件类型的兴趣,并提供当该类型的事件被激发时调用的Action。所以想象一下这样的事情
service.RegisterInterest(typeof(MyEvent), myAction)其中myAction的类型是Action<MyEvent> (这是我没有放在原始帖子中的东西,但应该有,而不是一个普通的Action)。
然后,应用程序的其他部分可以执行以下操作
service.TriggerEvent(typeof(MyEvent))这使得所有如上所述注册的Action<MyEvent>实例都是called...So,事实上Dictionary将Type映射到List<Action<Event>>,而不是单个Action。
发布于 2012-06-29 03:52:13
如果需要编译时检查,可以使用泛型:
public void AddAction<T>(Action a) where T : SomeParentClass
{
dict[typeof(T)] = a;
}您可能还希望保留非通用版本
public void AddAction(Type t, Action a)
{
if(! typeof(SomeClass).IsAssignableFrom(t)) throw new ArgumentException();
dict[t] = a;
}发布于 2012-06-29 03:53:03
我会用这样的东西:
class Container
{
private Dictionary<Type, Action> dict;
public bool AddAction(Type t, Action a)
{
if (typeof(SomeParentClass).IsAssignableFrom(t))
{
dict[t] = a;
return true;
}
return false;
}
}发布于 2012-06-29 03:46:15
使用SomeParentClass t作为参数,而不是Type t
https://stackoverflow.com/questions/11251778
复制相似问题