我正在C#中的游戏引擎工作。我正在使用的课程名为CEntityRegistry
,其工作是跟踪游戏中CEntity
的许多实例。我的目标是能够使用给定类型查询CEntityRegistry
,并获得该类型的每个CEntity
的列表。给定一个C#类型,获取其基类和实现的接口
我今天准备这样做,因此,为保持地图:正是如此
private IDictionary<Type, HashSet<CEntity>> m_TypeToEntitySet;
并更新注册表:
private void m_UpdateEntityList()
{
foreach (CEntity theEntity in m_EntitiesToRemove.dequeueAll())
{
foreach (HashSet<CEntity> set in m_TypeToEntitySet.Values)
{
if (set.Contains(theEntity))
set.Remove(theEntity);
}
}
foreach (CEntity theEntity in m_EntitiesToAdd.dequeueAll())
{
Type entityType = theEntity.GetType();
foreach (Type baseClass in entityType.GetAllBaseClassesAndInterfaces())
m_TypeToEntitySet[baseClass].Add(theEntity);
}
}
我的问题是,有没有功能Type.GetAllBaseClassesAndInterfaces
- 我怎么去写它?
,但肯定不希望一个类型的实例被计为一个实例的所有它的子类型和接口呢? – 2009-12-01 02:40:56
显然他有。 – SLaks 2009-12-01 02:45:55
您是否认为使用Type.IsAssignableFrom(Type)可能会使您的生活比试图映射每个CEntity的整个继承层次结构更简单?不知道您究竟打算如何使用存储库,但可能需要考虑一下。 – Rory 2009-12-01 02:48:51