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


Операторы в 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.

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

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, он вызывает spinClockwise метод aWidget. Если значение равно False, он вызывает spinCounterClockwise метод aWidget. Структура If...Then...Else управления заканчивается End If.

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

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

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

v = 42

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

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

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

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

x = y + z + FindResult(3)

В предыдущем примере значение, удерживаемое в переменной, добавляется в значение, удерживаемое в переменной yz, а затем добавляет значение, возвращаемое вызовом функции 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.

Аналогичным образом можно назначить соответствующие значения элементам программирования типа CharDateданных или 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в . Для получения дополнительной информации см. Widening and Narrowing Conversions.

Сужающие преобразования (те, которые не расширяются) несут риск сбоя во время выполнения или потери данных. Вы можете явно выполнить сужение преобразования с помощью функции преобразования типов или направить компилятор для выполнения всех преобразований неявно, задав параметр 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)
    

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

  • После двоичных операторов (+, *Or<=>>=And<<AndAlso>>OrElseLike-ModXor/<><^) в выражении. Например:

    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, FromInDistinctSelectOrder BySkipLetSkip WhileJoinTakeTake WhileGroup JoinGroup ByIntoOnWhereAscendingи ).Descending Невозможно разбить линию между ключевое слово операторов запросов, состоящими из нескольких ключевое слово (Order By, Group Join, Take 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.

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

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

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