Зачем нужен тип nothing какие выражения имеют такой тип какие ограничения накладываются на nothing
Обновлено: 21.11.2024
Объявляет и выделяет дисковое пространство для одной или нескольких переменных.
Синтаксис
Компоненты
Необязательный элемент. См. список атрибутов.
Необязательный элемент. Может применяться один из перечисленных ниже типов.
Необязательный элемент. См. раздел Shared.
Необязательный элемент. См. раздел Shadows.
Необязательный элемент. См. раздел static.
Необязательный элемент. См. раздел ReadOnly.
Необязательный элемент. Указывает, что это переменные объекта, которые ссылаются на экземпляры класса, которые могут создавать события. См. раздел WithEvents.
Обязательный элемент. Список переменных, объявляемых в этой инструкции.
Каждый элемент variable имеет перечисленные ниже синтаксис и компоненты.
variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With < [ .propertyname = propinitializer [ , . ] ] >] ] [ = initializer ]
Комментарии
компилятор Visual Basic использует Dim инструкцию для определения типа данных переменной и других сведений, например кода, который может получить доступ к переменной. В следующем примере объявляется переменная для хранения Integer значения.
Можно указать любой тип данных или имя перечисления, структуры, класса или интерфейса.
Для ссылочного типа используйте New ключевое слово, чтобы создать новый экземпляр класса или структуры, заданный типом данных. Если используется New , выражение инициализатора не используется. Вместо этого вы предоставляете аргументы, если они требуются, в конструктор класса, из которого создается переменная.
Переменную можно объявить в процедуре, блоке, классе, структуре или модуле. Нельзя объявить переменную в исходном файле, пространстве имен или интерфейсе. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.
Переменная, объявленная на уровне модуля вне любой процедуры, является переменной или полем члена . Переменные членов находятся в области действия класса, структуры или модуля. Переменная, объявленная на уровне процедуры, является локальной переменной. Локальные переменные находятся в области действия только в пределах их процедуры или блока.
Следующие модификаторы доступа используются для объявления переменных вне процедуры: Public ,, Protected Friend , Protected Friend и Private . Дополнительные сведения см. в разделе уровни доступа в Visual Basic.
Dim Ключевое слово является необязательным и обычно опускается при указании любого из следующих модификаторов: Public , Protected , Friend . Protected Friend Private Shared , Shadows , Static , ReadOnly или WithEvents .
Если Option Explicit параметр имеет значение On (значение по умолчанию), компилятору требуется объявление для каждой используемой переменной. Дополнительные сведения см. в разделе оператор Option Explicit.
Указание начального значения
При создании переменной можно присвоить значение. Для типа значения используйте инициализатор , чтобы указать выражение, присваиваемое переменной. Результатом вычисления выражения должно быть константа, которую можно вычислить во время компиляции.
Если инициализатор указан и в предложении не указан тип данных As , для получения типа данных из инициализатора используется вывод типа . В следующем примере оба типа num1 и num2 строго типизированы как целые числа. Во втором объявлении определение типа выводит тип из значения 3.
Определение типа применяется на уровне процедуры. Он не применяется за пределами процедуры в классе, структуре, модуле или интерфейсе. Дополнительные сведения о выводе типа см. в разделе Option Infer и определение локального типа.
Сведения о том, что происходит, если не указан тип данных или инициализатор, см. в подразделе типы данных и значения по умолчанию далее в этой статье.
Инициализатор объекта можно использовать для объявления экземпляров именованных и анонимных типов. Следующий код создает экземпляр Student класса и использует инициализатор объекта для инициализации свойств.
Объявление нескольких переменных
Можно объявить несколько переменных в одном операторе объявления, указав имя переменной для каждой из них, и после каждого имени массива с круглыми скобками. Переменные разделяются запятыми.
Если объявить более одной переменной с одним As предложением, вы не сможете предоставить инициализатор для этой группы переменных.
Можно указать различные типы данных для разных переменных, используя отдельное As предложение для каждой объявляемой переменной. Каждая переменная принимает тип данных, указанный в первом As предложении, обнаруженном после его variablename части.
Массивы
Можно объявить переменную для хранения массива, который может содержать несколько значений. Чтобы указать, что переменная содержит массив, сразу после нее следует использовать variablename круглые скобки. Дополнительные сведения см. в руководстве по работе с массивами.
Можно указать нижнюю и верхнюю границы каждого измерения массива. Для этого добавьте в boundslist круглые скобки. Для каждого измерения объект boundslist задает верхнюю границу и, при необходимости, нижнюю границу. Нижняя граница всегда равна нулю, независимо от того, указана она или нет. Каждый индекс может изменяться от нуля до значения его верхней границы.
Следующие две инструкции эквивалентны. Каждый оператор объявляет массив из 21 Integer элемента. При доступе к массиву индекс может изменяться от 0 до 20.
В следующей инструкции объявляется двухмерный массив типа Double . Массив содержит 4 строки (3 + 1) из 6 столбцов (5 + 1) каждого. Обратите внимание, что верхняя граница представляет наибольшее возможное значение индекса, а не длину измерения. Длина измерения является верхней границей плюс единица.
Массив может иметь размер от 1 до 32.
Все границы в объявлении массива можно оставить пустыми. В этом случае массив имеет указанное число измерений, но не инициализировано. Он имеет значение Nothing до тех пор, пока не будет инициализировано по крайней мере часть его элементов. В Dim инструкции должны быть указаны границы для всех измерений или для отсутствия измерений.
Если массив имеет более одного измерения, необходимо включить запятые между круглыми скобками, чтобы указать количество измерений.
Можно объявить массив нулевой длины , объявляя один из измерений массива равным-1. Переменная, содержащая массив нулевой длины, не имеет значения Nothing . Для некоторых функций среды CLR требуются массивы нулевой длины. При попытке доступа к такому массиву возникает исключение времени выполнения. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).
Значения массива можно инициализировать с помощью литерала массива. Для этого заключите значения инициализации в фигурные скобки ( <> ).
Для многомерных массивов инициализация каждого отдельного измерения заключается в фигурные скобки во внешнем измерении. Элементы задаются в построчном порядке.
Дополнительные сведения о литералах массивов см. в разделе массивы.
Типы данных и значения по умолчанию
В следующей таблице перечислены результаты различных сочетаний заданных типов данных и инициализаторов в операторе Dim .
Если параметры Option Infer и Option Strict отключены, переменная получает тип данных Object .
если указать тип данных, но не указать инициализатор, Visual Basic инициализирует переменную как значение по умолчанию для ее типа данных. В следующей таблице приведены значения инициализации по умолчанию.
Тип данных | Значение по умолчанию |
---|---|
Все числовые типы (включая Byte и SByte ) | 0 |
Char | Двоичный 0 |
Все ссылочные типы (включая Object , String и все массивы) | Nothing |
Boolean | False |
Date | 12:00 AM 1 января 1 года (01/01/0001 12:00:00 AM) |
Каждый элемент структуры инициализируется так, как если бы он был отдельной переменной. Если вы объявили длину массива, но не инициализируйте его элементы, каждый элемент инициализируется так, как если бы он был отдельной переменной.
Время существования статической локальной переменной
Static Срок жизни локальной переменной превышает время существования процедуры, в которой она объявлена. Границы времени существования переменной зависят от того, где объявляется процедура, и является ли она Shared .
Объявление процедуры | Переменная инициализирована | Переменная останавливается |
---|---|---|
В модуле | При первом вызове процедуры | При остановке выполнения программы |
В классе или структуре процедура Shared | При первом вызове процедуры либо в определенном экземпляре, либо в самом классе или структуре. | При остановке выполнения программы |
В классе или структуре процедура не Shared | При первом вызове процедуры в определенном экземпляре | Когда экземпляр выпускается для сборки мусора (GC) |
Атрибуты и модификаторы
Атрибуты можно применять только к переменным члена, а не к локальным переменным. Атрибут вносит сведения в метаданные сборки, что не имеет смысла для временного хранения, например локальных переменных.
На уровне модуля нельзя использовать Static Модификатор для объявления переменных члена. На уровне процедуры нельзя использовать,, Shared , Shadows ReadOnly WithEvents или модификаторы доступа для объявления локальных переменных.
Можно указать, какой код может получить доступ к переменной, указав accessmodifier . Переменные-члены класса и модуля (вне любой процедуры) по умолчанию имеют частный доступ, а переменные-члены структуры по умолчанию имеют общий доступ. Уровни доступа можно изменить с помощью модификаторов доступа. Нельзя использовать модификаторы доступа для локальных переменных (внутри процедуры).
Можно указать WithEvents только для переменных-членов, но не для локальных переменных внутри процедуры. Если указать WithEvents , то тип данных переменной должен быть конкретным типом класса, а не Object . Нельзя объявить массив с помощью WithEvents . Дополнительные сведения о событиях см. в разделе события.
Код за пределами класса, структуры или модуля должен уточнять имя переменной-члена именем этого класса, структуры или модуля. Код за пределами процедуры или блока не может ссылаться на локальные переменные в этой процедуре или блоке.
Освобождение управляемых ресурсов
Если класс принадлежит особому ценному и ограниченному ресурсу (например, к подключению к базе данных или файлу), может возникнуть необходимость в ожидании следующей сборки мусора для очистки экземпляра класса, который больше не используется. Класс может реализовать интерфейс, IDisposable чтобы предоставить способ освобождения ресурсов перед сборкой мусора. Класс, реализующий этот интерфейс, предоставляет Dispose метод, который может быть вызван для немедленного освобождения ценных ресурсов.
Using Инструкция автоматизирует процесс получения ресурса, выполнения набора инструкций и последующего удаления ресурса. Однако ресурс должен реализовывать IDisposable интерфейс. Дополнительные сведения см. в разделе Оператор using.
Пример 1
В следующем примере переменные объявляются с помощью Dim инструкции с различными параметрами.
Пример 2
В следующем примере выводятся простые числа от 1 до 30. Область локальных переменных описывается в разделе Комментарии к коду.
Пример 3
В следующем примере speedValue переменная объявляется на уровне класса. Private Ключевое слово используется для объявления переменной. Доступ к переменной может осуществляться любой процедурой в Car классе.
Читайте также: