Я пытаюсь использовать следующий метод, но он выдает ошибку компилятора:
public class MyManager<T> : where T:MyEventArgs
{
private Dictionary<EventHandler<T>, EventFilter<T>> m_cSubscriptions;
public void Subscribe<K>(EventHandler<K> _cHandler, EventFilter<K> _cFilter)
where K:T
{
try
{
// cannot convert EventHandler<K> to EventHandler<T>
m_cSubscriptions.Add(_cHandler, _cFilter);
}
catch (ArgumentException)
{
m_cSubscriptions[_cHandler] = _cFilter;
}
}
}
Вопрос: Почему я не могу преобразовать обработчик из K в T?
Я использую .net 2.0, потому что я использую Unity3D. Я должен бросить это сам? Я читал о ковариации и контравариантности, но я не мог понять это.