Поиск…


Вступление

Visual Basic 14 - это версия Visual Basic, которая была отправлена ​​как часть Visual Studio 2015.

Эта версия была переписана с нуля примерно на 1,3 миллиона строк VB. Многие функции были добавлены, чтобы удалить распространенные раздражения и сделать общие схемы кодирования более чистыми.

Номер версии Visual Basic прошел прямо с 12 до 14, пропуская 13. Это было сделано, чтобы VB соответствовал нумерации версий самой Visual Studio.

Нулевой условный оператор

Чтобы избежать вербальной проверки нуля, ?. оператор был введен на языке.

Старый подробный синтаксис:

If myObject IsNot Nothing AndAlso myObject.Value >= 10 Then

Теперь можно заменить кратким:

If myObject?.Value >= 10 Then

? оператор особенно эффективен, когда у вас есть цепочка свойств. Рассмотрим следующее:

Dim fooInstance As Foo = Nothing
Dim s As String

Обычно вам нужно написать что-то вроде этого:

If fooInstance IsNot Nothing AndAlso fooInstance.BarInstance IsNot Nothing Then
    s = fooInstance.BarInstance.Baz
Else
    s = Nothing
End If

Но с ? оператор можно заменить следующим образом:

s = fooInstance?.BarInstance?.Baz

Оператор NameOf

Оператор NameOf разрешает пространства имен, типы, переменные и имена участников во время компиляции и заменяет их эквивалентом строки.

Один из вариантов:

Sub MySub(variable As String)
    If variable Is Nothing Then Throw New ArgumentNullException("variable")
End Sub

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

Sub MySub(variable As String)
    If variable Is Nothing Then Throw New ArgumentNullException(NameOf(variable))
End Sub

С NameOf переименование переменной приведет к сбою компилятора. Это также позволит переименовать инструмент с одновременным переименованием.

Оператор NameOf использует только последний компонент ссылки в скобках. Это важно при обработке чего-то типа пространств имен в операторе NameOf .

Imports System

Module Module1
    Sub WriteIO()
        Console.WriteLine(NameOf(IO)) 'displays "IO"
        Console.WriteLine(NameOf(System.IO)) 'displays "IO"
    End Sub
End Module

Оператор также использует имя введенной ссылки, не изменяя импорт имен. Например:

Imports OldList = System.Collections.ArrayList

Module Module1
    Sub WriteList()
        Console.WriteLine(NameOf(OldList)) 'displays "OldList"
        Console.WriteLine(NameOf(System.Collections.ArrayList)) 'displays "ArrayList"
    End Sub
End Module

Строчная интерполяция

Эта новая функция делает конкатенацию строк более читаемой. Этот синтаксис будет скомпилирован в эквивалентный вызов String.Format .

Без интерполяции строк:

String.Format("Hello, {0}", name)

С интерполяцией строк:

$"Hello, {name}"

Две строки эквивалентны и оба скомпилированы для вызова String.Format .

Как и в String.Format , скобки могут содержать любое одиночное выражение (вызов метода, свойства, оператора нулевой коалесценции и т. Д.).

String Interpolation является предпочтительным методом для String.Format потому что он предотвращает появление некоторых ошибок во время выполнения. Рассмотрим следующую строку String.Format :

String.Format("The number of people is {0}/{1}", numPeople)

Это будет скомпилировано, но вызовет ошибку времени выполнения, поскольку компилятор не проверяет, соответствует ли количество аргументов заполнителям.

Авто-свойства только для чтения

В VB.NET в этом формате всегда были доступны свойства только для чтения:

Public Class Foo

  Private _MyProperty As String = "Bar"

  Public ReadOnly Property MyProperty As String
    Get
      Return _MyProperty
    End Get
  End Property

End Class

Новая версия Visual Basic позволяет коротко описать объявление свойства следующим образом:

Public Class Foo

  Public ReadOnly Property MyProperty As String = "Bar"

End Class

Фактическая реализация, генерируемая компилятором, в обоих примерах одинакова. Новый способ написать это всего лишь короткая рука. Компилятор все равно будет генерировать частное поле с форматом: _<PropertyName> чтобы вернуть свойство только для чтения.

Частичные модули и интерфейсы

Подобно частичным классам, новая версия Visual Basic теперь может обрабатывать частичные модули и частичные интерфейсы. Синтаксис и поведение точно такие же, как для частичных классов.

Пример частичного модуля:

Partial Module Module1
  Sub Main()
    Console.Write("Ping -> ")
    TestFunktion()
  End Sub
End Module

Partial Module Module1
  Private Sub TestFunktion()
    Console.WriteLine("Pong")
  End Sub
End Module

И частичный интерфейс:

Partial Interface Interface1
  Sub Methode1()
End Interface

Partial Interface Interface1
  Sub Methode2()
End Interface

Public Class Class1
  Implements Interface1
  Public Sub Methode1() Implements Interface1.Methode1
    Throw New NotImplementedException()
  End Sub

  Public Sub Methode2() Implements Interface1.Methode2
    Throw New NotImplementedException()
  End Sub
End Class

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

Многострочные строковые литералы

VB теперь позволяет строковые литералы, которые разбиваются на несколько строк.

Старый синтаксис:

Dim text As String = "Line1" & Environment.NewLine & "Line2"

Новый синтаксис:

Dim text As String = "Line 1
Line 2"

Улучшение директивы #Region

Директива #Region теперь может быть помещена внутри методов и может даже охватывать методы, классы и модули.

#Region "A Region Spanning A Class and Ending Inside Of A Method In A Module"
   Public Class FakeClass
    'Nothing to see here, just a fake class.
   End Class

   Module Extensions

    ''' <summary>
    ''' Checks the path of files or directories and returns [TRUE] if it exists.
    ''' </summary>
    ''' <param name="Path">[Sting] Path of file or directory to check.</param>
    ''' <returns>[Boolean]</returns>
    <Extension>
    Public Function PathExists(ByVal Path As String) As Boolean
        If My.Computer.FileSystem.FileExists(Path) Then Return True
        If My.Computer.FileSystem.DirectoryExists(Path) Then Return True
        Return False
    End Function

    ''' <summary>
    ''' Returns the version number from the specified assembly using the assembly's strong name.
    ''' </summary>
    ''' <param name="Assy">[Assembly] Assembly to get the version info from.</param>
    ''' <returns>[String]</returns>
    <Extension>
    Friend Function GetVersionFromAssembly(ByVal Assy As Assembly) As String
#End Region
        Return Split(Split(Assy.FullName, ",")(1), "=")(1)
    End Function
End Module

Комментарии после неявного продолжения строки

VB 14.0 вводит возможность добавлять комментарии после неявного продолжения строки.

Dim number =
    From c As Char 'Comment
    In "dj58kwd92n4" 'Comment
    Where Char.IsNumber(c) 'Comment
    Select c 'Comment

Обработка исключений

Во время кодирования непредвиденные ошибки возникают достаточно часто, что требует отладки и тестирования. Но иногда ошибки действительно ожидаются и обходят его, есть блок Try..Catch..Throw..Finally..End Try .

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

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

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

В случае, если нам нужно выскочить из часов, есть инструкция Exit Try которая может быть использована. Но и здесь код в разделе « Finally » будет выполнен до окончания.

Синтаксис прост;

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try

где только Try and End Try является обязательным. Остальное можно проигнорировать, но как хорошую практику, включите в себя часть « Finally , даже если она останется пустой.

Исходя из исключения, существует различный тип исключения, которое можно поймать. Они являются готовыми исключениями, доступными из .Net Framework, как показано ниже;

Класс исключения Краткое описание
System.IO.IOException Обрабатывает ошибки ввода-вывода
System.IndexOutOfRangeException Относится к индексу массива вне диапазона
System.ArrayTypeMismatchException Если тип несовместим с типом массива
System.NullReferenceException Обрабатывает ошибки, возникающие при ссылке на нулевой объект.
System.DivideByZeroException Обрабатывает ошибки, возникающие при делении дивиденда на ноль.
System.InvalidCastException Обрабатывает ошибки, возникающие при типизации.
System.OutOfMemoryException Обрабатывает ошибки, возникающие из-за недостаточной свободной памяти.
System.StackOverflowException Обрабатывает ошибки, возникающие при переполнении стека.
--------------------------- ------------------------


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