|
Программирование >> Обработка исключительных ситуаций
Обнуляемые типы 309 Обнуляемые типы В программировании давно существует проблема, каким образом задать, что переменной не присвоено никакого значения. Эта проблема решается разными способами. Один из способов заключается в том, чтобы присвоить переменной какое-либо значение, не входящее в диапазон допустимых для нее. Например, если величина может принимать только положительные значения, ей присваивается -1. Ясно, что для многих случаев этот подход неприменим. Другой способ - хранение логического признака, по которому можно определить, присвоено ли переменной значение. Этот способ не может использоваться, например, для значений, возвращаемых из метода. В версии С# 2.0 указанная проблема решается введением типов специального вида, называемых обнуляемыми (nullable). Обнуляемый тип представляет собой структуру, хранящую наряду со значением величины (свойство Value) логический признак, по которому можно определить, было ли присвоено значение этой величине (свойство HasValue). Если значение величине было присвоено, свойство HasValue имеет значение true. Если значение величины равно null, свойство HasValue имеет значение false, а попытка получить значение через свойство Value вызывает генерацию исключения. Обнуляемый тип строится на основе базового типа, за которым следует символ ?, например: int? х = 123; int? у = null; if ( х.HasValue ) Console.WriteLineC x ); вместо x : к записать x.Value if ( y.HasValue ) Console.WriteLineC у ); Существуют явные и неявные преобразования из обнуляемых типов в обычные и обратно, при этом выполняется контроль возможности получения значения, например: int i = 123: int? х = i: int --> int? double? у = x; int? -- > double? int? z = (int?) y; double? --> int? int j = (int) z; int? -- > int Для величин обнуляемых типов определены операции отношения . Операции == и != возвращают значение true, если обе величины имеют значение null. Естественно, что значение nul 1 считается не равным любому ненулевому значению. Операции <, >, <= и >= дают в результате false, если хотя бы один из операндов имеет значение nul 1. Арифметические операции с величинами обнуляемых типов дают в результате nul 1, если хотя бы один из операндов равен nul 1, например: int? х = null; int? у = х + 1; у = null Для величин обнуляемых типов введена еще одна операция - объединения ?? (null coalescing operator). Это бинарная операция, результат которой равен первому операнду, если он не равен null, и второму в противном случае. Иными словами, эта операция предоставляет замещаемое значение для null, например: int? х = null: int у = х ?? 0; у = О х = 1: у = х ?? 0: у = 1 Обнуляемые типы удобно использовать при работе с базами данных и XML. Рекомендации по программированию Алгоритм работы программы во многом зависит от способа организации ее данных, поэтому очень важно до начала разработки алгоритма выбрать оптимальные структуры данных, основываясь на требованиях к функциональности и быстродействию программы. Для разных задач необходимы различные способы хранения и обработки данных, поэтому необходимо хорошо представлять себе как характеристики и области применения абстрактных структур данных, так и их конкретную реализацию в виде коллекций библиотеки. Изучение возможностей стандартных коллекций и их грамотное применение является необходимым условием создания эффективных и профессиональных программ, позволяет сократить сроки разработки программ и повысить их надежность. Недостатками коллекций первых версий библиотеки .NET является отсутствие контроля типов на этапе компиляции и неэффективность при хранении элементов значимых типов. Параметризованные коллекции, появившиеся в версии 2.0 библиотеки, избавлены от этих недостатков, поэтому в программах рекомендуется использовать именно коллекции версии 2.0, выбирая наиболее подходящие классы в зависимости от решаемой задачи. Для реализации алгоритмов, независимых от типов данных, следует использовать классы-прототипы и обобщенные методы. Они не снижают эффективность программы по сравнению с обычными классами и методами, поскольку код для конкретного типа генерируется средой CLR во время выполнения программы. Помимо классов-прототипов и обобщенных методов можно описать параметризованные интерфейсы, структуры и делегаты. Частичные типы удобно использовать при разработке объемных классов группой программистов и для упрощения отладки программ. Обнуляемые типы применяют для работы с данными, для которых необходимо уметь определять, было ли им присвоено значение. Глава 14 Введение в программирование под Windows В пред1дущих главах мы изучали возможности языка С# на примере консольных приложений, чтобы не распылять свое внимание на изучение классов библиотеки .NET, поддерживающих стандартный графический интерфейс пользователя. Сейчас пришло время освоить принципы создания Windows-приложений и получить представление об основных классах библиотеки, которые при этом используются. В первую очередь рассмотрим основные особенности Windows как характерного и широко распространенного представителя современных операционных систем. Многозадачность - это возможность одновременно выполнять несколько приложений. Операционная система обеспечивает разделение ресурсов: каждому приложению выделяется свое адресное пространство, распределяется процессорное время и организуются очереди для доступа к внешним устройствам. Внутри приложения также можно организовать параллельное выполнение нескольких фрагментов, называемых потоками. В разных версиях Windows используются различные механизмы диспетчеризации. Независимость программ от аппаратуры. Для управления аппаратными средствами любое приложение обращается к операционной системе, что обеспечивает независимость от конкретных физических характеристик устройств: при смене устройства никакие изменения в программу вносить не требуется. Управление внешними устройствами обеспечивается с помощью драйверов. Стандартный графический интерфейс с пользователем. Основное взаимодействие с пользователем осуществляется в графическом режиме. Каждое приложение выполняет вывод в отведенную ему прямоугольную область экрана, называемую окном. Окно состоит из стандартных элементов. Это упрощает освоение программ пользователем и облегчает работу программиста, поскольку в его распоряжение предоставляются библиотеки интерфейсных компонентов. Такие библиотеки входят в состав систем программирования.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |