Tôi đang làm việc trên một cỗ máy trò chơi trong C#. Lớp tôi đang làm được gọi là CEntityRegistry
và công việc của nó là theo dõi nhiều phiên bản của CEntity
trong trò chơi. Mục tiêu của tôi là có thể truy vấn CEntityRegistry
với một loại nhất định và nhận danh sách của mỗi loại CEntity
loại đó.Đưa ra Loại C#, Nhận các Lớp cơ sở của nó và Giao diện Thực hiện
Những gì tôi muốn làm, do đó, là duy trì một bản đồ:
private IDictionary<Type, HashSet<CEntity>> m_TypeToEntitySet;
Và cập nhật registry thusly:
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);
}
}
Tôi có vấn đề là không có chức năng Type.GetAllBaseClassesAndInterfaces
- Làm thế nào tôi sẽ viết về nó?
nhưng chắc chắn bạn không muốn một thể hiện của một loại để được tính là như một thể hiện tất cả những gì là tiểu chủng loại và giao diện không? –
Dường như anh ấy làm. – SLaks
Bạn có nghĩ rằng việc sử dụng Type.IsAssignableFrom (Type) có thể làm cho cuộc sống của bạn đơn giản hơn một chút so với cố gắng ánh xạ toàn bộ hệ thống phân cấp thừa kế của mọi CEntity? Bạn không chắc chính xác bạn định sử dụng kho lưu trữ như thế nào, nhưng nó có thể là một cái gì đó để xem xét. – Rory