Поделиться через


Операторы в Visual Basic

Инструкция в Visual Basic — это полная инструкция. Он может содержать ключевые слова, операторы, переменные, константы и выражения. Каждое утверждение принадлежит одной из следующих категорий:

  • Операторы объявления, которые позволяют задать переменную, константу или процедуру, и также могут определить тип данных.

  • Исполняемые инструкции, которые инициируют действия. Эти операторы могут вызывать метод или функцию, а также могут перебирать циклически или разветвляться через блоки кода. Исполняемые инструкции включают инструкции назначения, которые присваивают значение или выражение переменной или константе.

В этом разделе описана каждая категория. Кроме того, в этом разделе описывается объединение нескольких инструкций в одной строке и продолжение инструкции по нескольким строкам.

Инструкции объявления

Операторы объявления используются, чтобы называть и определять процедуры, переменные, свойства, массивы и константы. При объявлении элемента программирования можно также определить его тип данных, уровень доступа и область. Дополнительные сведения см. в разделе "Объявленные характеристики элементов".

В следующем примере содержатся три объявления.

Public Sub ApplyFormat()
    Const limit As Integer = 33
    Dim thisWidget As New widget
    ' Insert code to implement the procedure.
End Sub

Первое объявление — это Sub инструкция. Вместе с соответствующим End Sub оператором он объявляет процедуру с именем applyFormat. Он также указывает, что applyFormat это Public, что означает, что любой код, который может ссылаться на него, может вызывать его.

Второе объявление — это Const инструкция, которая объявляет константу limit, указывая Integer тип данных и значение 33.

Третье объявление — это Dim инструкция, которая объявляет переменную thisWidget. Тип данных — это конкретный объект, а именно объект, созданный из Widget класса. Можно объявить переменную любого элементарного типа данных или любого типа объекта, который предоставляется в используемом приложении.

Начальные значения

При выполнении кода, содержащего инструкцию объявления, Visual Basic резервирует память, необходимую для объявленного элемента. Если элемент содержит значение, Visual Basic инициализирует его в значение по умолчанию для типа данных. Дополнительные сведения см. в разделе "Поведение" в инструкции Dim.

Вы можете присвоить начальное значение переменной при ее объявлении, как показано в следующем примере.

Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.

Если переменная является переменной объекта, вы можете явно создать экземпляр своего класса при объявлении его с помощью ключевого слова New Operator , как показано в следующем примере.

Dim f As New FileInfo("filename")

Обратите внимание, что начальное значение, указанное в инструкции объявления, не назначается переменной, пока выполнение не достигнет ее инструкции объявления. До этого времени переменная содержит значение по умолчанию для его типа данных.

Исполняемые инструкции

Исполняемая инструкция выполняет действие. Он может вызывать процедуру, перейти к другому месту в коде, выполнять цикл по нескольким операциям или вычислять выражение. Оператор назначения — это особый случай исполняемой инструкции.

В следующем примере используется If...Then...Else структура управления для запуска различных блоков кода на основе значения переменной. В каждом блоке For...Next кода цикл выполняет указанное количество раз.

Public Sub StartWidget(ByVal aWidget As widget,
    ByVal clockwise As Boolean, ByVal revolutions As Integer)
    Dim counter As Integer
    If clockwise = True Then
        For counter = 1 To revolutions
            aWidget.SpinClockwise()
        Next counter
    Else
        For counter = 1 To revolutions
            aWidget.SpinCounterClockwise()
        Next counter
    End If
End Sub

Инструкция If в предыдущем примере проверяет значение параметра clockwise. Если значение равно True, он выполнит метод spinClockwiseaWidget. Если значение равно False, он выполнит метод spinCounterClockwiseaWidget. Структура If...Then...Else управления заканчивается End If.

Цикл For...Next в каждом блоке вызывает соответствующий метод несколько раз, равных значению revolutions параметра.

Инструкции назначения

Операторы присваивания выполняют операции присваивания, которые состоят из принятия значения в правой части оператора присваивания (=) и хранения его в элементе слева, как в следующем примере.

v = 42

В предыдущем примере инструкция назначения сохраняет литеральное значение 42 в переменной v.

Подходящие элементы программирования

Элемент программирования слева от оператора присваивания должен иметь возможность принимать и хранить значение. Это означает, что это должна быть переменная или свойство, которое не является ReadOnly, или оно должно быть элементом массива. В контексте инструкции присваивания такой элемент иногда называется lvalue, что означает "левое значение".

Значение в правой части оператора присваивания создается выражением, которое может состоять из любого сочетания литералов, констант, переменных, свойств, элементов массива, других выражений или вызовов функций. В следующем примере показано это.

x = y + z + FindResult(3)

В предыдущем примере значение в переменной y добавляется к значению в переменной z, а затем добавляется значение, возвращаемое вызовом функции findResult. Затем общее значение этого выражения хранится в переменной x.

Типы данных в инструкциях назначения

Помимо числовых значений оператор присваивания также может назначать String значения, как показано в следующем примере.

Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.

Можно также назначать значения Boolean, используя либо литерал Boolean, либо выражение Boolean, как показано в следующем примере.

Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.

Аналогично, можно назначить соответствующие значения элементам программирования типа данных Char, Date или Object. Можно также назначить экземпляр объекта элементу, объявленному классом, из которого создается этот экземпляр.

Составные операторы присваивания

Составные операторы присваивания сначала выполняют операцию с выражением перед назначением его элементу программирования. В следующем примере показан один из этих операторов, +=который увеличивает значение переменной слева от оператора по значению выражения справа.

n += 1

В предыдущем примере добавляется значение 1 к значению n, а затем сохраняется новое значение n. Это краткий эквивалент следующей инструкции:

n = n + 1

Различные сложные операции назначения можно выполнять с помощью операторов этого типа. Список этих операторов и дополнительные сведения о них см. в разделе "Операторы назначения".

Оператор назначения объединения (&=) полезен для добавления строки в конец уже существующих строк, как показано в следующем примере.

Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".

Преобразования типов в инструкциях назначения

Значение, присваиваемое переменной, свойству или элементу массива, должно иметь тип данных, соответствующий целевому элементу. Как правило, следует попытаться создать значение того же типа данных, что и для конечного элемента. Однако некоторые типы можно преобразовать в другие типы во время назначения.

Сведения о преобразовании между типами данных см. в разделе "Преобразования типов" в Visual Basic. Вкратце, Visual Basic автоматически преобразует значение заданного типа в любой другой тип, к которому он расширяется. Расширяющее преобразование — это преобразование, которое всегда удачно выполняется во время выполнения и не теряет никаких данных. Например, Visual Basic преобразует значение Integer в Double , когда это целесообразно, потому что Integer расширяется до Double. Дополнительные сведения см. в разделе "Расширение и сужение преобразований".

Сужающие преобразования (те, которые не расширяются) несут риск сбоя во время выполнения или потери данных. Вы можете явно выполнить сужение преобразования с помощью функции преобразования типов или направить компилятор для выполнения всех преобразований неявно, задав параметр Option Strict Off. Дополнительные сведения см. в разделе "Неявные и явные преобразования".

Размещение нескольких выражений в одной строке

Можно использовать несколько операторов в одной строке, разделенной символом двоеточия (:). В следующем примере показано это.

Dim sampleString As String = "Hello World" : MsgBox(sampleString)

Хотя иногда удобно, эта форма синтаксиса затрудняет чтение и обслуживание кода. Таким образом, рекомендуется сохранить один оператор в каждой строке.

Продолжение утверждения на нескольких строках

Оператор обычно помещается в одну строку, но если он слишком длинен, его можно продолжить на следующей строке с помощью последовательности продолжения строки, которая состоит из пробела, за которым следует символ подчеркивания (_) и перенос строки. В следующем примере исполняемая инструкция MsgBox разбита на две строки.

Public Sub DemoBox()
    Dim nameVar As String
    nameVar = "John"
    MsgBox("Hello " & nameVar _
        & ". How are you?")
End Sub

Неявное продолжение строки

Во многих случаях можно продолжить инструкцию на следующей последовательной строке без использования символа подчеркивания (_). Следующие элементы синтаксиса неявно продолжают инструкцию в следующей строке кода.

  • После запятой (,). Рассмотрим пример.

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • После открытой скобки (() или перед закрывающей скобкой ()). Рассмотрим пример.

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • После открытой фигурной скобки ({) или перед закрывающей фигурной скобкой (}). Рассмотрим пример.

    Dim customer = New Customer With {
      .Name = "Terry Adams",
      .Company = "Adventure Works",
      .Email = "terry@www.adventure-works.com"
    }
    

    Дополнительные сведения см. в разделе "Инициализаторы объектов": именованные и анонимные типы или инициализаторы коллекции.

  • После открытого выражения, внедренного в XML-литерал (<%=), или перед закрытием такого выражения (%>). Рассмотрим пример.

    Dim customerXml = <Customer>
                          <Name>
                              <%=
                                  customer.Name
                              %>
                          </Name>
                          <Email>
                              <%=
                                  customer.Email
                              %>
                          </Email>
                      </Customer>
    

    Дополнительные сведения см. в разделе "Внедренные выражения" в ФОРМАТЕ XML.

  • После оператора объединения (&). Рассмотрим пример.

    cmd.CommandText = 
        "SELECT * FROM Titles JOIN Publishers " &
        "ON Publishers.PubId = Titles.PubID " &
        "WHERE Publishers.State = 'CA'"
    

    Дополнительные сведения см. в разделе "Операторы" по функциям.

  • После операторов назначения (=, &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=). Рассмотрим пример.

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    Дополнительные сведения см. в разделе "Операторы" по функциям.

  • После двоичных операторов (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) в выражении. Рассмотрим пример.

    Dim memoryInUse =
      My.Computer.Info.TotalPhysicalMemory +
      My.Computer.Info.TotalVirtualMemory -
      My.Computer.Info.AvailablePhysicalMemory -
      My.Computer.Info.AvailableVirtualMemory
    

    Дополнительные сведения см. в разделе "Операторы" по функциям.

  • После операторов Is и IsNot. Рассмотрим пример.

    If TypeOf inStream Is 
      IO.FileStream AndAlso
      inStream IsNot
      Nothing Then
    
        ReadFile(inStream)
    
    End If
    

    Дополнительные сведения см. в разделе "Операторы" по функциям.

  • После квалификатора элемента (.) и перед именем члена. Рассмотрим пример.

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    Однако при использовании инструкции _ или указании значений в списке инициализации для типа необходимо включить символ продолжения строки (With) после символа квалификатора элемента. При использовании инструкций или списков инициализации объектов рассмотрите возможность разрыва строки после оператора назначения (например, =при использовании With инструкций или списков инициализации объектов). Рассмотрим пример.

    ' Not allowed:
    ' Dim aType = New With { .
    '    PropertyName = "Value"
    
    ' Allowed:
    Dim aType = New With {.PropertyName =
        "Value"}
    
    
    
    Dim log As New EventLog()
    
    ' Not allowed:
    ' With log
    '    .
    '      Source = "Application"
    ' End With
    
    ' Allowed:
    With log
        .Source =
          "Application"
    End With
    

    Для получения дополнительной информации см. в разделе С... Завершение инструкции или Инициализаторов объектов: именованные и анонимные типы.

  • После квалификатора свойства оси XML (. или .@ или ...). Однако, при использовании ключевого слова _, необходимо включить символ продолжения строки (With) при указании квалификатора элемента. Рассмотрим пример.

    Dim customerName = customerXml.
      <Name>.Value
    
    Dim customerEmail = customerXml...
      <Email>.Value
    

    Дополнительные сведения см. в разделе "Свойства оси XML".

  • После знака меньше (<) или перед знаком больше (>) при указании атрибута. Также после знака "больше" (>), когда вы указываете атрибут. Однако при указании атрибутов уровня сборки или уровня модуля необходимо включить символ продолжения строки (_). Рассмотрим пример.

    <
    Serializable()
    >
    Public Class Customer
        Public Property Name As String
        Public Property Company As String
        Public Property Email As String
    End Class
    

    Дополнительные сведения см. в обзоре атрибутов.

  • До и после операторов запросов (Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending и Descending). Невозможно разбить линию между ключевыми словами операторов запросов, состоящими из нескольких ключевых слов (Order By, , Group JoinTake Whileи Skip While). Рассмотрим пример.

    Dim vsProcesses = From proc In
                        Process.GetProcesses
                      Where proc.MainWindowTitle.Contains("Visual Studio")
                      Select proc.ProcessName, proc.Id,
                             proc.MainWindowTitle
    

    Дополнительные сведения см. в разделе "Запросы".

  • После ключевого слова In в операторе For Each. Рассмотрим пример.

    For Each p In
      vsProcesses
    
        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}",
          p.ProcessName,
          p.Id,
          p.MainWindowTitle)
    Next
    

    Дополнительные сведения см. в разделе "Для каждого... Следующая инструкция.

  • После ключевого From слова в инициализаторе коллекции. Рассмотрим пример.

    Dim days = New List(Of String) From
      {
       "Mo", "Tu", "We", "Th", "F", "Sa", "Su"
      }
    

    Дополнительные сведения см. в разделе "Инициализаторы коллекций".

Добавление комментариев

Исходный код не всегда понятный сам по себе, даже для программиста, который его написал. Чтобы документировать свой код, большинство программистов широко используют встроенные комментарии. Примечания в коде могут объяснить процедуру или определенную инструкцию любому пользователю, который читает или работает с ним позже. Visual Basic игнорирует комментарии во время компиляции, и они не влияют на скомпилированный код.

Строки комментариев начинаются с апострофа (') или с REM, за которым следует пробел. Их можно добавлять в любом месте кода, за исключением строки. Чтобы добавить комментарий к инструкции, вставьте апостроф или REM после инструкции, после чего добавьте комментарий. Комментарии также могут идти по отдельной строке. В следующем примере показаны эти возможности.

' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.

Проверка ошибок компиляции

Если после ввода строки кода строка отображается с волнистым синим подчеркиванием (сообщение об ошибке может появиться также), в инструкции возникает синтаксическая ошибка. Необходимо выяснить, что не так с утверждением (посмотрите в списке задач или наведите указатель мыши на ошибку и прочтите сообщение об ошибке) и исправьте его. Пока вы не исправите все синтаксические ошибки в коде, программа не сможет скомпилироваться правильно.

Срок Определение
Операторы присваивания Предоставляет ссылки на справочные страницы языка, охватывающие такие операторы назначения, как =, *=и &=.
Операторы и выражения Показывает, как объединять элементы с операторами для получения новых значений.
Практическое руководство. Разрыв и объединение инструкций в коде Показывает, как разбить одну инструкцию на несколько строк и как поместить несколько операторов в одну строку.
Как: Пометить утверждения Показывает, как пометить строку кода.