возник вопрос: если есть метод типа void SendMessage(Message m) { } - какие тут возможные проблемы типобезопасности? (зачем нам преобразовывать объект m к производному типу) И как нас от подобной проблемы спасет метод типа void SendMessage<T>(T m) where T: Message { } ? Или я все не так понял и там другие проблемы типобезопасности? Спасибо
Не подскажете?
Если ты тип явно объявил, то где там обобощения?
Короче ты ничего не понял, изучай обобщения
Я как раз и спросил, в данном случае, если в методе предполагается использование параметра типа Message и наследников - каких именно ошибок типизации позволяют избежать обобщения в отличие от простого параметра типа Message, который также позволяет принимать наследников?
генерики позволяют подставить произвольный тип, а не только наследников
В случае конструкции where T : Message
Какие могут быть ошибки типизации без дженериков?
ну это просто какой-то еблан делал
InvalidCastException, я так понял
А где там каст блять?
Скажи, пожалуйста, почему данная конструкция плоха?
Если без дженерика передать в параметр типа обжект строку и скастить ее в инт (ты же не знаешь, какого типа параметр туда задали)
А где там обджект?
Там у тебя метод
Месседж*
смысла в ней ноль
Там обжекта нет, я как раз и пытаюсь понять, про какие возможные ошибки типизации, если не юзать дженерики, в случае метода с меседж говорит автор
Так если не юзать дженерики и наследование и обджект откуда им взяться?
Зачем тебе понимать что говорит автор? Ты шарп учишь или автора?
Ну кароче гибкость и исключение дублирования кода
Обсуждают сегодня