Visual Basic .NET Language
Возможности Visual Basic 14.0
Поиск…
Вступление
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 | Обрабатывает ошибки, возникающие при переполнении стека. |
--------------------------- | ------------------------ |