русский

C# не работает контравариация в параметрах делегатов

Gestern, 15:09
C# не работает контравариация в параметрах делегатов
 
alex445 патриот
Zuletzt geändert Gestern, 15:26 (alex445)

Есть классы

class Base {}

class Derived {}


Есть делегат

delegate void MyDelegate(Base obj)


Почему я не могу создать такой делегат через лямбду?

MyDelegate myDel = (Derived obj) => {};


Говорит, типы не совпадают - хочет Base obj (compile error CS1678). При этом в самом теле лямбды можно приводить параметры и нормально с ними работать:

MyDelegate myDel = (Base obj) =>

{

Derived der = (Derived)obj;

};


ИИ пишет, что контравариация в лямбдах есть и первый вариант лямбды должен работать.

.NET 8.


Вот если бы был делегат с параметром Derived, а я бы передавал в лямбде Base, то не сработало бы - и народ в интернете пишут, что так не работает. А наоборот-то почему у меня не пашет?

 

Sprung zu