Generics Presentation Generics са класове, структури, интерфейси и методи, които

Подобни презентации

Презентация на тема: " Generics Generics са класове, структури, интерфейси и методи, в които някои типове сами по себе си са параметри. Тези типове са изброени." — Препис:

1 Generics Generics са класове, структури, интерфейси и методи, в които някои типове сами по себе си са параметри. Тези типове са изброени в списъка с параметри на типа (заместители). Генериците са синтактично подобни на шаблоните в неуправляем C++. Поддържа се само от .NET Framework 2.0 и по-нова версия. Дефиницията на общ тип дефинира шаблон, където някои от използваните типове са параметри и ще бъдат инстанцирани, когато се създават обекти от общия тип. Пример за дефиниция на общ тип Създаване на обекти с общ тип public >

2 Защо се нуждаем от генерични лекарства? В библиотеката с класове на NET Framework класовете за събиране се дефинират като съставени от елементи от тип Object. Два проблема: операцията за боксиране при добавяне на елемент, който има тип стойност към колекция. невъзможност за проверка на безопасността на типа по време на компилация.

3 Generics и CLR Generics са синтактично подобни на шаблоните в неуправляем C++, но се компилират в собствен код по време на изпълнение. Генериците се поддържат от IL и CLR. Както при обикновените типове, кодът на генеричния тип се компилира в IL и информацията за генеричните параметри се поставя в метаданните. Когато IL кодът се компилира в инструкции на процесора, на параметрите на типа се присвояват стойности. В случай, че генеричен параметър приема референтен тип като стойност, той се използвасъщия нативен код. За всеки тип стойност за общ параметър JIT компилаторът генерира нов код, но не дублира вече генерирания код. Generics позволяват да се пише ефективен, безопасен за типа код. MSDN. Статия Juval Lowy Въведение в C# Generics.

4 Общи методи >

5 Ограничения Можете да зададете ограничения за типове, които могат да бъдат стойности на общи типове параметри. .NET Framework 2.0 и по-нови версии поддържат следните ограничения: типът трябва да изпълнява определени интерфейси; типът трябва да има дефиниран базов клас; типът трябва да има конструктор без параметри (по подразбиране ctor); типът трябва да е референтен тип или стойностен тип. Информацията за ограниченията се съхранява в метаданни и се използва от JIT компилатора.

6 Ограничения -2 Ограниченията се определят с помощта на ключовата дума where. В следващия пример тип, който може да бъде стойността на параметъра на типа K, трябва да имплементира интерфейса IComparable и да има базов клас MyBase >

7 Ограничения -3 В следния пример тип K трябва да има публичен конструктор без параметри: >

8 Обобщения и наследяване Ако базовият клас е общ тип, тогава когато се дефинира производен клас, или общият параметър на базовия клас трябва да бъде общ параметър на производния клас; или трябва да използвате конкретна стойност за общия тип. обществен >

9 Обобщения и имплицитно преобразуване на типове Разрешено е неявно преобразуване на общ тип към тип обект; към тип, възможността за кастинг към който следва от ограниченията. обществен >

10 Генерични и изрично преобразуване на типове Изрично преобразуване на общ тип към произволенинтерфейс. Изричното прехвърляне към класа не е разрешено. обществен > обект -> низ. По време на изпълнение може да бъде хвърлено изключение. обект -> низ. По време на изпълнение може да бъде хвърлено изключение.">

11 Общи методи >

12 Инструкцията по подразбиране // Когато се опитва да избере елемент от празен стек, методът Pop() // не хвърля изключение, а връща стойност по подразбиране - null // за стек от низове и 0 за стек от цели числа. обществен >