Проблемы создания объектных образов и строго типизованные коллекции

Проблемы создания объектных образов и строго типизованные коллекции

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

public class IntCollection: IEnumerable {

 private ArrayList arInts = new ArrayList();

 public IntCollection() {}

 // Восстановление значения для вызывающей стороны.

 public int GetInt(int pos) { return (int)arInts[pos]; }

 // Операция создания объектного образа!

 public void AddInt(int i) { arInts.Add(i); }

 public void ClearInts() { arInts.Clear(); }

 public int Count { get { return arInts.Count; } }

 IEnumerator IEnumerable.GetEnumerator() { return arInts.GetEnumerator(); }

}

Вне зависимости от того, какой тип вы выберете для хранения целых чисел (System.Array, System.Collections.ArrayList и т.п.), вы не сможете избавиться от проблемы .NET 1.1, связанной с созданием объектных образов. Нетрудно догадаться, что здесь снова на помощь приходят обобщения. В следующем фрагменте программного кода тип System.Collections.Generic.List‹› используется для создания контейнера целых чисел, не имеющего проблем создания объектных образов и восстановлений значений при вставке и получении типов характеризуемых значений.

static void Main (string [] args) {

 // Баз создания объектного образа!

 List‹int› myInts = new List‹int›();

 myInts.Add.(5);

 // Без восстановления значения!

 int i = myInts[0];

}

Просто в качестве подтверждения рассмотрите следующий CIL-код для этого метода Main() (обратите внимание да отсутствие в нем каких бы то ни было блоков box и unbox).

.method private hidebysig static void Main(string[] args) cil managed {

 .entrypoint

 // Code size 24 (0x18)

 .maxstack 2

 .locals init ([0] class [mscorlib] System.Collections.Generic.List`1‹int32› myInts, [1] int32 i)

 IL_0000: nop

 IL_0001: newobj instance void class [mscorlib] System.Collections.Generic.List`1‹int32›::.ctor()

 IL_0006: stloc.0

 IL_0007: ldloc.0

 IL_0008: ldc.i4.5

 IL_0009: callvirt instance void class [mscorlib]System.Collections.Generic.List`1‹int32›::Add(!0)

 IL_000e: nop

 IL_000f: ldloc.0

 IL_0010: ldc.i4.0

 IL_0011: callvirt instance !0 class [mscorlib]System.Collections.Generic.List`1‹int32›::get_Item(int32)

 IL_0016: stloc.1

 IL_0017: ret

} // end of method Program::Main

Теперь, когда вы имеете лучшее представление о роли обобщений в .NET2.0, мы с вами готовы углубиться в детали. Для начала мы формально рассмотрим пространство имен System.Collections.Generic.

Исходный код. Проект CustomNonGenericCollection размещен в подкаталоге, соответствующем главе 10.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Создаем каталог коллекции

Из книги Музыкальный центр на компьютере автора Леонтьев Виталий Петрович

Создаем каталог коллекции Мало просто создать на вашем компьютере MP3-коллекцию – ей необходимо еще грамотно управлять! Особенно в том случае, когда ваши альбомы разбросаны по разным папкам и даже дискам (что, увы, встречается чаще всего). Нужен – жизненно необходим! –


Примеры создания объектных образов и восстановления значений

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Примеры создания объектных образов и восстановления значений Вы, наверное, спросите, когда действительно бывает необходимо вручную выполнять преобразование в объектный тип (или восстановление из объектного образа)? Предыдущий пример был исключительно иллюстративным,


ГЛАВА 7. Интерфейсы и коллекции

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

ГЛАВА 7. Интерфейсы и коллекции В этой главе предлагается рассмотреть тему программирования на основе интерфейсов, чтобы расширять ваши представления об объектно-ориентированном подходе в области разработки приложений. Здесь вы узнаете, как в рамках C# определяются и


Снова о создании объектных образов, восстановлении значений и System.Object

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Снова о создании объектных образов, восстановлении значений и System.Object Чтобы понять, в чем заключаются преимущества использования обобщений, следует выяснить, какие проблемы возникают у программиста без их использования. Вы должны помнить из главы 3, что платформа .NET


Проблемы создания объектных образов и восстановления значений

Из книги 10 простых и легких способов моментального повышения прибыльности любого коммерческого сайта автора Дин Терри

Проблемы создания объектных образов и восстановления значений Операции создания объектных образов и восстановления из них значений очень удобны с точки зрении программиста, но такой упрощенный подход при обмене элементами стека и динамической памяти имеет свои


Роль объектных графов

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Роль объектных графов Как уже упоминалось, при сериализации объекта среда CLR учитывает состояния всех связанных объектов. Множество связанных объектов представляется объектным графом. Объектные графы обеспечивают простой способ учета взаимных связей в множестве


Строго типизованные объекты DataSet

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Строго типизованные объекты DataSet Строго типизованные объекты DataSet (как и подразумевает их название) позволяют взаимодействовать с внутренними таблицами объектов DataSet, используя для этого специальные свойства, методы и события базы данных, а не обобщенное свойство Tables.


Коллекции

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Коллекции Перед программистом часто возникает задача упорядоченного хранения объектов и переменных. Для этого он вынужден самостоятельно реализовывать такие структуры как списки, сложные массивы. Библиотека классов MFC позволяет значительно облегчить решение этих


Объекты-коллекции

Из книги автора

Объекты-коллекции В WSH входят объекты, с помощью которых можно получить доступ к коллекциям, содержащим следующие элементы:? параметры командной строки запущенного сценария или ярлыка Windows (объекты WshArguments, WshNamed и WshUnnamed);? значения переменных среды (объект WshEnvironment);? пути к


69. Определите разумную стратегию обработки ошибок и строго ей следуйте

Из книги автора

69. Определите разумную стратегию обработки ошибок и строго ей следуйте РезюмеЕще на ранней стадии проектирования разработайте практичную, последовательную и разумную стратегию обработки ошибок и строго следуйте ей. Убедитесь, что ваша стратегия включает


Коллекции объектов

Из книги автора

Коллекции объектов Коллекция- это VBA-объект специального назначения. Как видно из самого названия, коллекции предназначены для упрощения работы с набором объектов, когда этот набор объектов нужно использовать как одно целое. Как правило, все объекты в коллекции имеют


1.2.2. Компоновка объектных файлов

Из книги автора

1.2.2. Компоновка объектных файлов После того как файлы main.c и reciprocal.cpp скомпилированы, необходимо скомпоновать их. Если в проект входит хотя бы один файл C++, компоновка всегда осуществляется с помощью компилятора g++. Если же все файлы написаны на языке С, нужно использовать