Pracuję na silniku gry w języku C#. Klasa, nad którą pracuję nazywa się CEntityRegistry
, a jej zadaniem jest śledzenie wielu wystąpień CEntity
w grze. Moim celem jest umożliwienie przeskanowania CEntityRegistry
z danym typem i uzyskanie listy każdego z tych CEntity
tego typu.Biorąc pod uwagę typ C#, Zdobądź jego klasy bazowe i implementuj interfejsy
Co chciałbym zrobić, jest więc utrzymanie mapę:
private IDictionary<Type, HashSet<CEntity>> m_TypeToEntitySet;
i aktualizuje rejestr wygląda następująco:
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);
}
}
Problem mam to, że nie ma funkcji Type.GetAllBaseClassesAndInterfaces
- Jak mam to napisać?
ale na pewno nie chcesz instancją typu należy zaliczyć jako przykład wszystko to podtypy i interfejsy, jak również? –
Najwyraźniej tak. – SLaks
Czy uważałeś, że użycie Type.IsAssignableFrom (Type) może uczynić twoje życie nieco prostszym, niż próba mapowania całej hierarchii dziedziczenia każdej CEntity? Nie wiesz dokładnie, jak dokładnie zamierzasz korzystać z repozytorium, ale może być na co popatrzeć. – Rory