Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Повторное использование двоичного кода

Читайте также:
  1. А) ИСПОЛЬЗОВАНИЕ КАТЕГОРИИ ВИДА В РУССКОМ ЯЗЫКЕ
  2. Автоматическая идентификация. Использование технологии штрихового кодирования при выполнении транспортных операций.
  3. В области талии допускается использование любых материалов, разрешается использование любого цвета.
  4. Вопрос 5. Технология майнд-менеджмента с использованием интеллект-карт для создания эффективного обзора задач.
  5. Выбор времени и использование удобных поводов.
  6. Выбор и использование вспомогательных технологий в коммуникативных целях
  7. Г) ИСПОЛЬЗОВАНИЕ МОРФОЛОГИЧЕСКИХ СРЕДСТВ ЯЗЫКА

Лекция 7. Обобщения

Производительность

Одним из основных преимуществ обобщений является производительность. При работе с множеством объектов можно использовать классы коллекций из пространства имен System.Collections. Добавление элемента, имеющего тип значений (не ссылочный) к такой коллекции требовало упаковки и распаковки, когда такое значение преобразовывалось в ссылочный тип и обратно.

Типы значений сохраняются в стеке. Типы ссылок — в куче. Классы С# являются ссылочными типами; структуры — типами значений. .NET позволяет легко конвертироватъ типы значений в ссылочные, поэтому их можно использовать там, где ожидаются объекты (ссылочных типов). Например, значение типа int можно присвоить объекту. Преобразование типа значений в ссылочный тип называется упаковкой. Упаковка происходит автоматически, когда метод ожидает параметр ссылочного типа, а ему передается тип значений. С другой стороны, упакованный тип значений может быть обратно преобразован к простому типу значений с помощью распаковки. При распаковке требуется операция приведения.

Упаковку и распаковку применять легко, но они сильно влияют на производительность, особенно при выполнении итераций по большому количеству элементов.

Безопасность типов

Другим свойством обобщений является безопасность типов. Когда в классе ArrayList сохраняются объекты, то в коллекцию могут быть вставлены объекты различных типов. Следующий пример демонстрирует вставку целого, строки и объекта типа MyClass в коллекцию ArrayList:

 

ArrayList list = new ArrayList();

list.Add(44);

list.Add("mystring");

list. Add (new MyClass());

 

Теперь, если реализовать итерацию по коллекции приведенным ниже оператором foreach, который проходит по целым элементам, то компилятор примет этот код. Однако поскольку не все элементы коллекции могут быть приведены к типу int, возникнет ошибка во время выполнения:

 

foreach(int i in list)

{

Console.WriteLine(i);

}

 

Ошибки должны быть обнаружены как можно раньше. При использовании обобщенного класса List<T> обобщенный тип-параметр Т задает тип элементов, который допускается вставлять в коллекцию. Компилятор не пропустит следующий код, потому что метод Add( ) имеет недопустимые аргументы:

 

List<int> list = new List<int>();

list.Add(44);

list.Add("mystring"); // ошибка компиляции

list.Add(new MyClass()); // ошибка компиляции

 

Повторное использование двоичного кода

Обобщения повышают повторную используемость двоичного кода. Обобщенный класс может быть определен однажды, и на его основе могут быть созданы экземпляры многих типов. Вам не нужно при этом иметь доступ к исходным текстам.

В качестве примера рассмотрим код, использующий класс List<T> пространства имен System.Collections.Generic из сборки mscorlib для создания специализированных версий, предназначенных для хранения элементов типов int, string и MyClass:

 

List<int> list = new List<int>();

list.Add(44);

List<string> stringList = new List<string>();

stringList.Add("mystring");

List<MyClass> myclassList = new List<MyClass>();

myClassList.Add(new MyClass());

 

Обобщенные типы могут быть написаны на одном языке, а использованы на любом другом из языков .NET.


Дата добавления: 2015-07-07; просмотров: 162 | Нарушение авторских прав


Читайте в этой же книге: Поиск элементов | Сортировка | Преобразования типов | Создание пользовательских обобщенных классов | Обобщенные методы | Обобщенные делегаты |
<== предыдущая страница | следующая страница ==>
Безопасность при ремонте и эксплуатации аккумуляторных батарей.| Обзор обобщенных коллекций

mybiblioteka.su - 2015-2021 год. (0.008 сек.)