私はC#のゲームエンジンで作業しています。私が取り組んでいるクラスはCEntityRegistry
と呼ばれ、その仕事はゲーム内の多くの場合CEntity
を追跡することです。私の目標は、特定のタイプのCEntityRegistry
を照会し、そのタイプの各CEntity
のリストを取得できるようにすることです。私がやりたいのは何C#の型を指定すると、その基底クラスと実装されたインターフェイスを取得します。
は、そのため、マップを維持している:私が持っている問題は、機能がないということである
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
:
private IDictionary<Type, HashSet<CEntity>> m_TypeToEntitySet;
そしてthuslyレジストリを更新します - どうやってそれを書くの?
、しかし確実に、あなたはすべてのそれは同様のサブタイプとインターフェイスの型のインスタンスは、インスタンスとしてとしてカウントされるようにしたくないですか? –
明らかに彼はそうです。 – SLaks
Type.IsAssignableFrom(Type)を使用すると、すべてのCEntityの継承階層全体をマップしようとするより簡単になります。リポジトリの使用方法を正確にどのように正確に計画しているのかはっきりしていませんが、見るべきことかもしれません。 – Rory