Проблемы создания объектных образов и строго типизованные коллекции
Проблемы создания объектных образов и строго типизованные коллекции
Строго типизованные коллекции можно найти в библиотеках базовых классов .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.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Объекты-коллекции
Объекты-коллекции В WSH входят объекты, с помощью которых можно получить доступ к коллекциям, содержащим следующие элементы:? параметры командной строки запущенного сценария или ярлыка Windows (объекты WshArguments, WshNamed и WshUnnamed);? значения переменных среды (объект WshEnvironment);? пути к
Коллекции объектов
Коллекции объектов Коллекция- это VBA-объект специального назначения. Как видно из самого названия, коллекции предназначены для упрощения работы с набором объектов, когда этот набор объектов нужно использовать как одно целое. Как правило, все объекты в коллекции имеют
69. Определите разумную стратегию обработки ошибок и строго ей следуйте
69. Определите разумную стратегию обработки ошибок и строго ей следуйте РезюмеЕще на ранней стадии проектирования разработайте практичную, последовательную и разумную стратегию обработки ошибок и строго следуйте ей. Убедитесь, что ваша стратегия включает
Примеры создания объектных образов и восстановления значений
Примеры создания объектных образов и восстановления значений Вы, наверное, спросите, когда действительно бывает необходимо вручную выполнять преобразование в объектный тип (или восстановление из объектного образа)? Предыдущий пример был исключительно иллюстративным,
ГЛАВА 7. Интерфейсы и коллекции
ГЛАВА 7. Интерфейсы и коллекции В этой главе предлагается рассмотреть тему программирования на основе интерфейсов, чтобы расширять ваши представления об объектно-ориентированном подходе в области разработки приложений. Здесь вы узнаете, как в рамках C# определяются и
Снова о создании объектных образов, восстановлении значений и System.Object
Снова о создании объектных образов, восстановлении значений и System.Object Чтобы понять, в чем заключаются преимущества использования обобщений, следует выяснить, какие проблемы возникают у программиста без их использования. Вы должны помнить из главы 3, что платформа .NET
Проблемы создания объектных образов и восстановления значений
Проблемы создания объектных образов и восстановления значений Операции создания объектных образов и восстановления из них значений очень удобны с точки зрении программиста, но такой упрощенный подход при обмене элементами стека и динамической памяти имеет свои
Роль объектных графов
Роль объектных графов Как уже упоминалось, при сериализации объекта среда CLR учитывает состояния всех связанных объектов. Множество связанных объектов представляется объектным графом. Объектные графы обеспечивают простой способ учета взаимных связей в множестве
Строго типизованные объекты DataSet
Строго типизованные объекты DataSet Строго типизованные объекты DataSet (как и подразумевает их название) позволяют взаимодействовать с внутренними таблицами объектов DataSet, используя для этого специальные свойства, методы и события базы данных, а не обобщенное свойство Tables.
1.2.2. Компоновка объектных файлов
1.2.2. Компоновка объектных файлов После того как файлы main.c и reciprocal.cpp скомпилированы, необходимо скомпоновать их. Если в проект входит хотя бы один файл C++, компоновка всегда осуществляется с помощью компилятора g++. Если же все файлы написаны на языке С, нужно использовать
Создаем каталог коллекции
Создаем каталог коллекции Мало просто создать на вашем компьютере MP3-коллекцию – ей необходимо еще грамотно управлять! Особенно в том случае, когда ваши альбомы разбросаны по разным папкам и даже дискам (что, увы, встречается чаще всего). Нужен – жизненно необходим! –
Коллекции
Коллекции Перед программистом часто возникает задача упорядоченного хранения объектов и переменных. Для этого он вынужден самостоятельно реализовывать такие структуры как списки, сложные массивы. Библиотека классов MFC позволяет значительно облегчить решение этих