我正在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