Почему я не могу использовать BindingList<TInherited> в качестве параметра для метода, который принимает BindingList<T>?
В основном у меня есть метод со следующей подписью:
public void Save(BindingList<T> items);
и я пытаюсь вызвать это с помощью
classInstance.Save(items); //items = BindingList<ObjectInheritedFromT>
но кажется, что C# не реализует наследование, вызывающее ошибку во время компиляции, где весь код, написанный для T
будет полностью функциональным для ObjectInheritedFromT
а не так ли?
Есть ли обходной путь для этого? Я понял, что это работает, если бы это было IEnumerable
, но потом (как ни странно) получается BindingList<>
не реализует IEnumerable, и мне нужно выполнять такие операции, как Remove
а также Add
,
1 ответ
Решение
Так как BindingList<T>
не объявлен как BindingList<out T>
- не поддерживает ковариацию
Дайте это прочитать:
Часто задаваемые вопросы о ковариантности и контравариантности