Sto lavorando su un motore di gioco in C#. La classe a cui sto lavorando si chiama CEntityRegistry
e il suo compito è quello di tenere traccia delle numerose istanze di CEntity
nel gioco. Il mio obiettivo è poter interrogare lo CEntityRegistry
con un determinato tipo e ottenere un elenco di ogni CEntity
di quel tipo.Dato un tipo C#, Ottieni le sue classi di base e le interfacce implementate
Quello che mi piacerebbe fare, quindi, è di mantenere una mappa:
private IDictionary<Type, HashSet<CEntity>> m_TypeToEntitySet;
E aggiornare il Registro di questa convenzione:
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);
}
}
Il problema che ho è che non esiste una funzione Type.GetAllBaseClassesAndInterfaces
- Come andrei a scriverlo?
ma sicuramente non si vuole un esempio di un tipo da contare come come istanza tutti i suoi sotto-tipi e interfacce come bene? –
Apparentemente lo fa. – SLaks
Hai mai pensato che l'uso di Type.IsAssignableFrom (Type) potrebbe rendere la tua vita un po 'più semplice rispetto al tentativo di mappare l'intera gerarchia di ereditarietà di ogni CEntity? Non sei sicuro di cosa esattamente come pensi di usare il repository, ma potrebbe essere qualcosa da guardare. – Rory