Поиск…


Комментарии

Первое, что нужно знать, - это написать комментарии.

В VB .NET вы пишете комментарий, написав апостроф или напишите REM . Это означает, что остальная часть строки не будет учитываться компилятором.

'This entire line is a comment
Dim x As Integer = 0 'This comment is here to say we give 0 value to x

REM There are no such things as multiline comments
'So we have to start everyline with the apostrophe or REM

Помощник Intellisense

Еще одна интересная возможность - добавить свои собственные комментарии в Visual Studio Intellisense. Таким образом, вы можете сделать свои собственные письменные функции и классы понятными. Для этого вы должны ввести символ комментария три раза подряд над вашей функцией.

После этого Visual Studio автоматически добавит XML-документацию:

''' <summary>
''' This function returns a hello to your name
''' </summary>
''' <param name="Name">Your Name</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Test(Name As String) As String
    Return "Hello " & Name
End Function

После этого, если вы введете свою тестовую функцию где-нибудь в своем коде, эта небольшая помощь будет отображаться:

Помощь Intellisense

Объявление переменной

В VB.NET каждая переменная должна быть объявлена ​​до того, как она будет использоваться (если опция Explicit установлена ​​в On ). Существует два способа объявления переменных:

  • Внутри Function или Sub :
Dim w 'Declares a variable named w of type Object (invalid if Option Strict is On)
Dim x As String 'Declares a variable named x of type String
Dim y As Long = 45 'Declares a variable named y of type Long and assigns it the value 45
Dim z = 45 'Declares a variable named z whose type is inferred
           'from the type of the assigned value (Integer here) (if Option Infer is On)
           'otherwise the type is Object (invalid if Option Strict is On)
           'and assigns that value (45) to it 

См. Этот ответ для получения полной информации о Option Explicit , Strict и Infer .

  • Внутри Class или Module :

Эти переменные (также называемые полями в этом контексте) будут доступны для каждого экземпляра Class они объявлены. Они могут быть доступны извне объявленного Class зависимости от модификатора ( Public , Private , Protected , Protected Friend или Friend )

Private x 'Declares a private field named x of type Object (invalid if Option Strict is On)
Public y As String 'Declares a public field named y of type String
Friend z As Integer = 45 'Declares a friend field named z of type Integer and assigns it the value 45

Эти поля также могут быть объявлены с помощью Dim но значение изменяется в зависимости от типа окружения:

Class SomeClass
    Dim z As Integer = 45 ' Same meaning as Private z As Integer = 45
End Class

Structure SomeStructure
    Dim y As String ' Same meaning as Public y As String
End Structure

Модификаторы

Модификаторы - это способ указать, как внешние объекты могут обращаться к данным объекта.

  • общественного

Означает, что любой объект может получить к нему доступ без ограничений

  • Частный

Значит, только объект объявления может получить доступ и просмотреть это

  • защищенный

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

  • Друг

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

Public Class MyClass
    Private x As Integer

    Friend Property Hello As String
  
    Public Sub New()
    End Sub

    Protected Function Test() As Integer
        Return 0
    End Function
End Class

Написание функции

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

Функция :

  • Должен быть объявлен в классе или модуле
  • Возвращает значение (заданное типом возврата)
  • Имеет модификатор
  • Может принимать параметры для обработки
Private Function AddNumbers(X As Integer, Y As Integer) As Integer
    Return X + Y
End Function

Имя функции может использоваться как оператор return

Function sealBarTypeValidation() as Boolean
    Dim err As Boolean = False

    If rbSealBarType.SelectedValue = "" Then
        err = True
    End If

    Return err
End Function

это то же самое, что и

Function sealBarTypeValidation() as Boolean
    sealBarTypeValidation = False        

    If rbSealBarType.SelectedValue = "" Then
        sealBarTypeValidation = True
    End If

End Function

Инициализаторы объектов

  • Именованные типы

     Dim someInstance As New SomeClass(argument) With {
         .Member1 = value1,
         .Member2 = value2
         '...
     }
    

    Эквивалентно

     Dim someInstance As New SomeClass(argument)
     someInstance.Member1 = value1
     someInstance.Member2 = value2
     '...
    
  • Анонимные типы (опция Infer должна быть включена)

      Dim anonymousInstance = New With {
          .Member1 = value1,
          .Member2 = value2
          '...
      }
    

    Хотя подобный anonymousInstance someInstance не имеет такого же типа, как someInstance

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

      Dim anonymousInstance = New With {
          value1,
          value2,
          foo.value3
          '...
      }
      ' usage : anonymousInstance.value1 or anonymousInstance.value3
    

    Каждому члену может предшествовать Key слово Key . Этими членами будут свойства ReadOnly , те, которые не будут доступны для чтения / записи

      Dim anonymousInstance = New With {
          Key value1,
          .Member2 = value2,
          Key .Member3 = value3
          '...
      }
    

    Два анонимных экземпляра, определенные с теми же членами (имя, тип, наличие Key и порядка), будут иметь одинаковый анонимный тип.

      Dim anon1 = New With { Key .Value = 10 }
      Dim anon2 = New With { Key .Value = 20 }
    
      anon1.GetType Is anon2.GetType ' True
    

    Анонимные типы структурно равнозначны. Два экземпляра тех же анонимных типов, имеющих по крайней мере одно свойство Key с одинаковыми значениями Key будут равны. Вы должны использовать метод Equals для его проверки, используя = не будет компилироваться, а Is будет сравнивать ссылку на объект.

      Dim anon1 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 0 }
      Dim anon2 = New With { Key .Name = "Bar", Key .Age = 20, .Salary = 0 }
      Dim anon3 = New With { Key .Name = "Foo", Key .Age = 10, .Salary = 10000 }
    
      anon1.Equals(anon2) ' False
      anon1.Equals(anon3) ' True although non-Key Salary isn't the same
    

Инициализатор имен и анонимных типов может быть вложенным и смешанным

    Dim anonymousInstance = New With {
        value,
        Key .someInstance = New SomeClass(argument) With {
            .Member1 = value1,
            .Member2 = value2
            '...
        }
        '...
    }

Инициализатор коллекции

  • Массивы

     Dim names = {"Foo", "Bar"} ' Inferred as String()
     Dim numbers = {1, 5, 42} ' Inferred as Integer()
    
  • Контейнеры ( List(Of T) , Dictionary(Of TKey, TValue) и т. Д.)

     Dim names As New List(Of String) From {
         "Foo",
         "Bar"
         '...
     }
    
     Dim indexedDays As New Dictionary(Of Integer, String) From {
         {0, "Sun"},
         {1, "Mon"}
         '...
     }
    

    Эквивалентно

     Dim indexedDays As New Dictionary(Of Integer, String)
     indexedDays.Add(0, "Sun")
     indexedDays.Add(1, "Mon")
     '...
    

    Элементы могут быть результатом конструктора, вызова метода, доступа к свойствам. Его также можно смешивать с инициализатором Object.

     Dim someList As New List(Of SomeClass) From {
         New SomeClass(argument),
         New SomeClass With { .Member = value },
         otherClass.PropertyReturningSomeClass,
         FunctionReturningSomeClass(arguments)
         '...
     }
    

    Невозможно использовать синтаксис инициализатора инициализатора AND и инициализатор коллекции для одного и того же объекта одновременно. Например, они не будут работать

     Dim numbers As New List(Of Integer) With {.Capacity = 10} _
                                         From { 1, 5, 42 }
    
     Dim numbers As New List(Of Integer) From {
         .Capacity = 10,
         1, 5, 42
     }
    
     Dim numbers As New List(Of Integer) With {
         .Capacity = 10,
         1, 5, 42
     }
    
  • Пользовательский тип

    Мы также можем разрешить синтаксис инициализатора коллекции, предоставляя настраиваемый тип.
    Он должен реализовывать IEnumerable и иметь доступный и совместимый с помощью правил перегрузки метод Add (instance, Shared или even extension)

    Продуманный пример:

     Class Person
         Implements IEnumerable(Of Person) ' Inherits from IEnumerable
    
         Private ReadOnly relationships As List(Of Person)
    
         Public Sub New(name As String)
             relationships = New List(Of Person)
         End Sub
    
         Public Sub Add(relationName As String)
             relationships.Add(New Person(relationName))
         End Sub
    
         Public Iterator Function GetEnumerator() As IEnumerator(Of Person) _
             Implements IEnumerable(Of Person).GetEnumerator
    
             For Each relation In relationships
                 Yield relation
             Next
         End Function
    
         Private Function IEnumerable_GetEnumerator() As IEnumerator _ 
             Implements IEnumerable.GetEnumerator
    
             Return GetEnumerator()
         End Function
     End Class
    
     ' Usage
     Dim somePerson As New Person("name") From {
         "FriendName",
         "CoWorkerName"
         '...
     }
    

    Если мы хотим добавить объект Person в List(Of Person) , просто поместив его в инициализатор коллекции (но мы не можем изменить класс List (Of Person)), мы можем использовать метод расширения

     ' Inside a Module
     <Runtime.CompilerServices.Extension>
     Sub Add(target As List(Of Person), name As String)
         target.Add(New Person(name))
     End Sub
    
     ' Usage
     Dim people As New List(Of Person) From {
         "Name1", ' no need to create Person object here
         "Name2"
     }
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow