Всем привет. Ради интереса пытаюсь сделать что-то похожее на систему компонентов в unity. В данный момент я могу получить объект который был добавлен ранее по его типу, но что делать если запрашиваемый класс является базовым классом для какого-нибудь объекта который хранится в словаре ? Например в словаре хранятся "MovementComponent,PistolComponent,RifleComponent" и я запрашиваю через GetCustomComponent"WeaponComponent" который является базовым для "PistolComponent,RifleComponent"
P.S Понятно что можно получить весь список значений из словаря и циклом проверять через is возможность приведения объекта. Но возможно есть более элегантный способ ? Так как в оболочке кода Unity они передают в движок тип искомого объекта и пустую интовую ссылку для возврата компонента.
private Dictionary<Type, MonoBehaviour> _componentContainer;
public void AddCustomComponent<T>(MonoBehaviour component) where T : MonoBehaviour
{
_componentContainer.Add(typeof(T), component);
}
public void RemoveCustomComponent<T>() where T : MonoBehaviour
{
_componentContainer.Remove(typeof(T));
}
public T GetCustomComponent<T>() where T : MonoBehaviour
{
return _componentContainer[typeof(T)] as T;
}