C# не работает контравариация в параметрах делегатов
Ты точно знаешь, Вася-коллега не знает.
Там инициализируется объект и ему тут же назначаются свойства. Одно из свойств - делегат, принимающий этот же объект. Поэтому тип параметра делегата совпадает с типом самого инициализируемого объекта:
var obj = new Obj();
obj.Handler = (BaseObj o) => {...};
Вот только тип параметра делегата сделали зачемто базовым типом для объектов, так что мне в хендлере приходится его всё время приводить.
Я кажется понял, почему. В МСовских UI-фреймворках есть такой паттерн, когда для обработчика события сам объект, для которого событие обрабатывают, передают как object sender - т.е. с наиболее общим типом. А в обработчике ты уже сам его к чему нужно приводишь. Ну и здесь подобное сделали. Но мне надоело приводить, и хочу сразу готовый тип иметь.
А Вася просто должен познакомиться с фреймворком и посмотреть хотя бы пару примеров. В МСовских фреймворках Вася тоже же не с бухты барахты начинает код строчить, как ИИ какой-нибудь?
Zurück