29 / 31 / 2
Регистрация: 14.04.2012
Сообщений: 152
|
||||||
1 | ||||||
Что такое Name<T>11.06.2012, 21:20. Показов 6243. Ответов 3
Метки нет (Все метки)
Здравствуйте,читаю Герберта Шилдта,в главе про многопоточное программирования он во всю использует такие делегаты/методы с названием Name<T>,где T -какой-нибудь тип(bool,int)
Совсем не понимаю,что это такое,ведь в главе про обобщения не было этого,хотя я догадываюсь,что принцип тот же. Помогите,я привык вникать в текст,а тут такое. А так же он в этих <> использует такие операторы как in,что они делают? Пример:
0
|
11.06.2012, 21:20 | |
Ответы с готовыми решениями:
3
Что такое метод equals() и что такое класс Object Что такое статический метод и что за слово static? Что такое API и что подразумевается под interface Что такое ? в c#? |
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|||||||||||||||||||||||||||||||
12.06.2012, 02:15 | 2 | ||||||||||||||||||||||||||||||
Абсолютно то же самое, что и в обобщениях: указываются типы, которые могут служить аргументами или возвращаемыми значениями метода, на который ссылается этот делегат.
Начиная с четвертой версии фреймворка у интерфейсов и делегатов появилась такая штука, как вариантность. В этом месте у многих сносит крышу. Интерфейсы и делегаты могут быть ковариантными и контрвариантными (covariant/contravariant. Я не знаю как правильно по-русски это дело называется, может кто поправит). Если имеется класс А, от которого наследуется класс B, то интерфейс или делегат X<B> является ковариантным в том случае, если переменную типа X<B> можно неявно привести к типу X<A>:
8
|
Alvin Seville
|
|
27.02.2019, 17:02 | 3 |
Ковариантность - это я ещё могу придумать практическое применение. Но зачем контрвариантность? Мне бы хотелось увидеть примеры, где бы это могло было быть полезным? Желательно, жизненные, как сейчас говорит молодежь.
0
|
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
|
|||||||||||||||||||||
27.02.2019, 21:26 | 4 | ||||||||||||||||||||
Ну самый распространенный пример, пожалуй, — это контрвариантность делегатов.
Почему МС рекомендует всем событиям давать сигнатуру вида void (object, TEventArgs) , где TEventArgs : EventArgs ?Потому, что делегаты контрвариантны в параметрах. Это значит, что если у вас есть метод void Foo(object sender, EventArgs e) , то вы этот метод можете подписать на любое событие, вне зависимости от конкретного типа второго параметра. До тех пор, пока этот параметр наследуется от EventArgs.С интерфейсами примерно то же самое: контрвариантность позволяет передавать тип с более широким функционалом в компонент, которому нужен более узкий функционал. Простой пример из всеми нами горячо любимых игрушек. Инвентарь:
1
|
27.02.2019, 21:26 | |
27.02.2019, 21:26 | |
Помогаю со студенческими работами здесь
4
Что такое \t? Что такое \n Что такое this? Что такое Инкапсуляция? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |