| | ||
|
|
|
В VB .NET,
как и в прежних версиях VB, объекты создаются ключевым словом New (исключение
составляют строки и массивы — для создания этих объектов предусмотрена сокращенная
запись).
Рассмотрим
практический пример — в .NET Framework входит полезный класс Random для работы
со случайными числами. По своим возможностям этот класс превосходит функцию
Rnd, сохраненную в языке для обеспечения обратной совместимости. Например, класс
Random позволяет заполнить байтовый массив случайными числами от 0 до 255 или
сгенерировать положительное случайное число в заданном интервале. Однако Random
— не функция, а класс, методы которого вызываются с указанием конкретного экземпляра.
А для этого необходимо предварительно создать экземпляр (проще говоря, объект)
класса Random.
Сделать это
можно несколькими способами, и в любом варианте используется ключевое слово
New. Самый наглядный, хотя и не самый компактный способ заключается в отделении
объявления класса от вызова New:
Dim aRandomlnstance As Random
' Объявление aRandomlnstance = New Random()
'
Создание экземпляра
Многие программисты
предпочитают использовать сокращенную запись:
Dim aRandomlnstance As New Random
'
Экземпляр создается при объявлении
Эта команда
эквивалентна приведенному выше фрагменту; в ней используется такая возможность
VB .NET, как инициализация переменных при объявлении.
На языке ООП
метод New называется конструктором, поскольку он предназначен для создания (конструирования)
экземпляров класса.
Программисты, работавшие с предыдущими версиям VB, должны обратить внимание
на следующее: в VB .NET не поддерживается ключевое слово Set (некоторые побочные
эффекты его исчезновения описаны в разделе «Свойства» настоящей
главы). Два варианта синтаксиса New различаются только реакцией на исключения,
возникающие при создании объектов (см. главу 7).
В прежних
версиях VB между полной и сокращенной формой вызова конструктора существовали
тонкие различия, связанные с тем, что при сокращенной записи создание объекта
откладывалось до момента первого использования. В VB .NET эта особенность была
исключена.
Некоторые
программисты (особенно работающие на С# и Java) предпочитают третий вариант
синтаксиса, который выглядит как комбинация первых двух:
Dim foo As Random = New Random()
'
В стиле C#/Java
Он ничем не
отличается от второго варианта синтаксиса.
Метод New
позволяет конструировать объекты в любом выражении VB .NET, если результат соответствует
контексту. Следующая команда VB .NET вполне допустима
(хотя понять ее непросто, поэтому использовать подобный стиль программирования
не рекомендуется):
Consolе.WriteLi
net New Random().Next())
Впрочем, подобные
конструкции могут встретиться в чужих программах, которые вам придется сопровождать.
Особенно часто они используются программистами с опытом работы на C++/Java.
Создав экземпляр
класса Random, вы можете пользоваться его методами и свойствами при помощи знакомого
«точечного» синтаксиса. Библиотека .NET Framework содержит множество
классов; технология IntelliSense всегда напомнит вам, что можно сделать с тем
или иным экземпляром класса (рис. 4.1).
Рис.
4.1. Подсказка IntelliSense для класса Random
Например,
в отличие от функции Rnd из прежних версий VB вам не придется дополнительно
обрабатывать числа от 0 до 1, чтобы получить случайное положительное число в
заданном интервале. Вам понадобилось случайное целое от 1 до 6? Воспользуйтесь
следующей конструкцией:
Dim aRandomlinstance As New Random()
Dim die As Integer die =aRandomInstance.Next(1.6)
Console.WriteLine(die)
Не используйте класс Random для серьезных криптографических задач, поскольку
его алгоритм построения случайных чисел легко взломать. Библиотека .NET Framework
велика, и в нее входит генератор случайных чисел, надежный с точки зрения криптографии
(конечно, более медленный) — класс RandomNumberGenerator из пространства имен
System.Security.Cryptography (пространства имен рассматриваются ниже в этой
главе).
Доступ к средствам
класса обычно осуществляется через конкретный экземпляр, однако у этого правила
имеется исключение. Дело в том, что некоторые возможности реализуются на уровне
класса, а не отдельных объектов. В главе 3 мы встречались с классом Math и использованием
конструкций Math . PI и Math . Sin( ) без вызова метода New. Члены, принадлежащие
классу в целом, а не его отдельным экземплярам, называются общими (shared).
К общим членам можно обращаться как по имени класса, так и по имени объектной
переменной, объявленной с соответствующим
типом. Предположим, у вас имеется класс Ваr с общим методом Foo. Метод Foo может
быть вызван любым. из приведенных ниже способов:
Ваг.Foo()
Dim
test As Bar test.Foo()
В
других языках программирования (таких, как С# и Java) общие члены называются
статическими (static).
;