Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Введение в универсальные шаблоныСодержание книги
Поиск на нашем сайте
Способ, которым универсальные классы и методы сочетают возможность многократного использования, строгую типизацию и эффективность, отличается от способа, используемого их нестандартными аналогами. Чаще всего универсальные шаблоны используются с функционирующими с ними коллекциями и методами. Библиотека классов в платформе.NET Framework версии 2.0 предоставляет новое пространство имен, System.Collections.Generic, содержащее несколько новых универсальных классов коллекций. Во всех приложениях, предназначенных для выполнения в.NET Framework 2.0 и более поздней версии, вместо старых нестандартных аналогов, таких как ArrayList, рекомендуется использовать новые универсальные классы коллекции. Разумеется, чтобы получить собственные строго типизированные и эффективные обобщенные решения и шаблоны разработки, можно создать пользовательские универсальные типы и методы. В следующем примере кода в демонстрационных целях показан простой универсальный класс, реализующий связанный список. (В большинстве случаев следует использовать класс List<(Of <(T>)>), предоставленный библиотекой классов платформы.NET Framework, а не создавать собственный.) Параметр-тип T используется в нескольких местах, где конкретный тип обычно использовался бы для указания типа элемента, хранящегося в списке. Его можно использовать следующим образом: · в качестве типа параметра метода в методе AddHead; · в качестве возвращаемого типа свойства GetNext и Data открытого метода во вложенном классе Node; · в качестве типа данных закрытого члена во вложенном классе. Обратите внимание, что T доступен для вложенного класса Node. Когда будет создан GenericList<T> с конкретным типом, например как GenericList<int>, каждое вхождение T будет заменено int.
// type parameter T in angle brackets public class GenericList<T> { // The nested class is also generic on T. private class Node { // T used in non-generic constructor. public Node(T t) { next = null; data = t; } private Node next; public Node Next { get { return next; } set { next = value; } } // T as private member data type. private T data; // T as return type of property. public T Data { get { return data; } set { data = value; } } } private Node head; // constructor public GenericList() { head = null; } // T as method parameter type: public void AddHead(T t) { Node n = new Node(t); n.Next = head; head = n; } public IEnumerator<T> GetEnumerator() { Node current = head; while (current!= null) { yield return current.Data; current = current.Next; } } }
ß---- The following code example shows how client code uses the generic GenericList<T> class to create a list of integers. Simply by changing the type argument, the following code could easily be modified to create lists of strings or any other custom type:
Следующий пример кода показывает, как клиентский код использует класс GenericList<T> для создания списка целых чисел. Благодаря простому изменению аргумента-типа, следующий код можно легко преобразовать для создания списка строк или любого другого пользовательского типа.
Benefits of Generics Generics provide the solution to a limitation in earlier versions of the common language runtime and the C# language in which generalization is accomplished by casting types to and from the universal base type Object. By creating a generic class, you can create a collection that is type-safe at compile-time. The limitations of using non-generic collection classes can be demonstrated by writing a short program that uses the ArrayList collection class from the.NET Framework class library. ArrayList is a highly convenient collection class that can be used without modification to store any reference or value type.
But this convenience comes at a cost. Any reference or value type that is added to an ArrayList is implicitly upcast to Object. If the items are value types, they must be boxed when they are added to the list, and unboxed when they are retrieved. Both the casting and the boxing and unboxing operations decrease performance; the effect of boxing and unboxing can be very significant in scenarios where you must iterate over large collections.
|
|||||||
Последнее изменение этой страницы: 2017-01-19; просмотров: 103; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.105.80 (0.006 с.) |