* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Применение встроенной функциональности типов данных
7 февраля 2009
У всех типов данных есть встроенная функциональность, включающая, по крайней мере, следующие четыре метода: • Equals — сравнивает два экземпляра одного типа; • GetHashCode — возвращает хеш-код для данного типа; • GetType — возвращает объект типа для текущего экземпляра; • ToString — возвращает объект в виде строки, понятной человеку. Как видите, размер типов данных очень мал. Как же они поддерживают все эти методы?
Упаковка Секрет заключается в упаковке (boxing) — неявном преобразовании типов значений в ссылочные типы. Все классы и типы ведут начало от базового класса Object, а че- тыре вышеупомянутых метода являются методами класса Object. Поскольку любой класс происходит от класса Object, все классы могут быть неявно преобразованы в этот тип. При вызове этих встроенных методов типа исполняющая среда создает в стеке временную ссылку, таким образом, позволяя обращаться с данными типа зна- чения, как со ссылочным типом. Упаковку типов значений можно выполнять и вручную. Для этого достаточно подлежащее упаковке значение записать в переменную типа Object: Visual Basic .NET Dim I As Integer = 100 Dim 0 As Object 0 = I Visual C# int I = 100; object 0; 0 = 1; Обратная операция — преобразование упакованной переменной в тип значения • называется распаковкой (unboxing). Для распаковки переменной следует явно привести ее к требуемому типу, но так можно поступать только с объектами, кото- рые ранее были упакованы. Собственные методы типов данных У типов данных также есть методы, не унаследованные ими от класса Object. Обыч- но они реализуют функциональность, специфичную для типа. В главе 2 мы позна- комили вас с некоторыми типа Char, выполняющими сравнение значений этого типа. Этот раздел слишком мал, чтобы привести в нем достаточно полный обзор этих методов, но мы все же рассмотрим наиболее популярные. Метод Parse Все типы значения поддерживают метод Parse, позволяющий получить из строки числовое значение. Метод Parse чрезвычайно удобен при разработке пользователь- ского интерфейса. Элементы управления, принимающие данные от пользователя (такие, как TextBox), получают их в виде строк, а метод Parse позволяет преобразо- вать эти строки в числа, если же строка не может быть преобразована в число, воз- никает ошибка. Во всех реализациях метод Parse является общим (Shared} или ста- тическим (static), поэтому его следует вызывать из типа, а не из экземпляра объекта. > Как преобразовать строку в значение числового типа Вызовите метод Parse типа данных, в который нужно преобразовать строку, на- пример, так: Visual Basic .NET Dim I As Integer Dim S As String S = "1234" ' I = 1234 I = Integer.Parse(S) Visual C# int I; string S; S = "1234"; // I = 1234 I = int.Parse(S); Функции для манипулирования строками Для многих приложений жизненно необходима возможность манипулирования строками (например, преобразования строк в формат, пригодный для отображения пользователю, извлечения подстрок из имеющейся строки и т.д.). Класс 5frmgпод- держивает разнообразные методы для работы со строками. Подробное обсуждение всех методов класса String не является целью этого занятия, но самые полезные из них описаны в таблицах 3-4 и 3-5. В первой таблице указаны методы экземпляров типа String; возвращаемая ими строка зависит от экземпляра строкового значения, из которого они вызваны. Во второй таблице перечислены общие (статические) методы, которые необходимо вызывать из типа String. Таблица 3-4. Полезные методы экземпляров класса String (выборочно) Имя Описание String. Insert Вставляет заданную строку в текущий экземпляр String. Pad Left, String. Pad Right Добавляет к текущей строке символы — соответственно слева или справа String.Remove Удаляет из текущей строки заданное количество символов, начиная с заданного String. Replace Siring. Split String. Substring String. ToCharArray String. ToLower, String. String. Trim End, String. String. Trim Заменяет в текущей строке заданный символ другим заданным символом Возвращает массив разделенных заданным символом строк, полученных путем разбиения заданной строки Возвращает подстроку, полученную из текущего экземпляра Возвращает массив символов, составляющих текущую строку ToUpper Возвращают строку, преобразованную в нижний или верхний регистр соответственно TrimStart, Удаляют из текущей строки последний, первый или оба этих символа соответственно Таблица 3-5. Полезные статические методы класса String (выборочно) Имя Описание String.Compare Сравнивает заданные экземпляры String.Concat Возвращает строку, полученную конкатенацией двух или более строк String.Format Возвращает строку, отформатированную согласно заданному формату String.Join Возвращает строку, полученную конкатенацией заданного массива строк, вставляя между элементами массива заданную строку-разделитель Резюме • .NET Framework предоставляет систему типов данных, устойчивую к ошибкам и обеспечивающую контроль типов. В ней имеются типы, представляющие целые числа, числа с плавающей точкой, а также булевы и строковые значения • Преобразование типов осуществляется двумя способами: • неявно — их исполняющая среда выполняет автоматически и только в тех случаях, когда потеря данных исключена. Пример — преобразование типа с меньшей точностью в тип с большей точностью; • явно — такие преобразования явно определяются в коде. Они несут потен- циальную опасность потери данных, поэтому их нужно применять с осто- рожностью. • Параметр Option Strict On, поддерживаемый Visual Basic .NET, включает строгий контроль типов во время разработки. Это позволяет выявить ошибки, связан- ные с несоответствием типов, на «отлов» которых в противном случае потребо- валось бы очень много времени. Это параметр следует использовать, где только возможно. • Упаковка позволяет обращаться с типами значения, как со ссылочными типа- ми. При распаковке выполняется преобразование упакованных ссылочных ти- пов в типы значения. • У .NET-типов имеется встроенная функциональность, специфичная для типа. Метод Parse поддерживают все типы значений, он удобен для преобразования строк в типы значения. Класс String предоставляет ряд удобных функций для работы со строками.