Zoeken…


Invoering

Visual Basic 14 is de versie van Visual Basic die is verzonden als onderdeel van Visual Studio 2015.

Deze versie is volledig opnieuw geschreven in ongeveer 1,3 miljoen regels VB. Veel functies zijn toegevoegd om veelvoorkomende irritaties te verwijderen en gemeenschappelijke codeerpatronen schoner te maken.

Het versienummer van Visual Basic ging rechtstreeks van 12 naar 14, waarbij 13 werd overgeslagen. Dit werd gedaan om VB in lijn te houden met de versienummering van Visual Studio zelf.

Null voorwaardelijke operator

Om uitgebreide null-controle te voorkomen, de ?. operator is geïntroduceerd in de taal.

De oude uitgebreide syntaxis:

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

Kan nu worden vervangen door de beknopte:

If myObject?.Value >= 10 Then

De ? operator is bijzonder krachtig wanneer u een reeks eigenschappen hebt. Stel je de volgende situatie voor:

Dim fooInstance As Foo = Nothing
Dim s As String

Normaal gesproken zou je zoiets moeten schrijven:

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

Maar met de ? operator kan dit worden vervangen door:

s = fooInstance?.BarInstance?.Baz

Naam van operator

De operator NameOf lost tijdens het compileren naamruimten, typen, variabelen en NameOf op en vervangt deze door het tekenreeksequivalent.

Een van de use cases:

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

De oude syntaxis zal het risico blootleggen van het hernoemen van de variabele en het laten van de hard-gecodeerde string naar de verkeerde waarde.

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

Met NameOf zal het hernoemen van alleen de variabele een compilerfout veroorzaken. Hierdoor kan het hernoemen ook beide met een enkele inspanning hernoemen.

De operator NameOf gebruikt alleen het laatste onderdeel van de referentie tussen haakjes. Dit is belangrijk bij het verwerken van zoiets als naamruimten in de NameOf operator.

Imports System

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

De operator gebruikt ook de naam van de ingevoerde referentie zonder de invoer van naam te wijzigen. Bijvoorbeeld:

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

Stringinterpolatie

Deze nieuwe functie maakt de stringconcentratie leesbaarder. Deze syntaxis wordt gecompileerd naar de overeenkomstige String.Format aanroep.

Zonder stringinterpolatie:

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

Met stringinterpolatie:

$"Hello, {name}"

De twee lijnen zijn equivalent en beide worden gecompileerd tot een aanroep van String.Format .

Net als in String.Format kunnen de haakjes elke expressie bevatten (aanroep naar een methode, eigenschap, een nulcoalescente-operator enzovoort).

String.Format is de voorkeursmethode boven String.Format omdat het voorkomt dat er runtime-fouten optreden. Beschouw de volgende String.Format regel:

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

Dit compileert, maar veroorzaakt een runtime-fout omdat de compiler niet controleert of het aantal argumenten overeenkomt met de tijdelijke aanduidingen.

Alleen-lezen automatische eigenschappen

Alleen-lezen eigenschappen waren altijd mogelijk in VB.NET in deze indeling:

Public Class Foo

  Private _MyProperty As String = "Bar"

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

End Class

De nieuwe versie van Visual Basic staat een korte hand toe voor de eigenschapsverklaring als volgt:

Public Class Foo

  Public ReadOnly Property MyProperty As String = "Bar"

End Class

De daadwerkelijke implementatie die door de compiler wordt gegenereerd, is voor beide voorbeelden exact hetzelfde. De nieuwe methode om het te schrijven is slechts een korte hand. De compiler genereert nog steeds een privéveld met de indeling: _<PropertyName> om de alleen-lezen eigenschap te ondersteunen.

Gedeeltelijke modules en interfaces

Net als bij gedeeltelijke klassen kan de nieuwe versie van Visual Basic nu gedeeltelijke modules en gedeeltelijke interfaces verwerken. De syntaxis en het gedrag is precies hetzelfde als voor gedeeltelijke klassen.

Een voorbeeld van een gedeeltelijke module:

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

En een gedeeltelijke interface:

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

Net als voor gedeeltelijke klassen moeten de definities voor de gedeeltelijke modules en interfaces zich in dezelfde naamruimte en dezelfde assembly bevinden. Dit komt omdat de gedeeltelijke delen van de modules en interfaces tijdens de compilatie zijn samengevoegd en de gecompileerde assemblage geen enkele aanwijzing bevat dat de oorspronkelijke definitie van de module of interface is gesplitst.

Multiline string literals

VB staat nu stringliterals toe die over meerdere lijnen worden verdeeld.

Oude syntaxis:

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

Nieuwe syntaxis:

Dim text As String = "Line 1
Line 2"

#Regio richtlijn verbeteringen

#Regio-richtlijn kan nu in methoden worden geplaatst en kan zelfs methoden, klassen en modules omvatten.

#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

Opmerkingen na impliciete voortzetting van de lijn

VB 14.0 introduceert de mogelijkheid om opmerkingen toe te voegen na impliciete lijnvervolging.

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

Uitzondering afhandeling

Tijdens het coderen treden er vaak genoeg onverwachte fouten op, waarvoor fouten moeten worden opgelost en getest. Maar soms worden de fouten inderdaad verwacht en om het te omzeilen, is er het Try..Catch..Throw..Finally..End Try blok.

Om een fout correct te beheren, wordt de code in een blok Try..Catch , waarbij de Catch , zoals de naam al aangeeft, alle uitzonderingen Try..Catch die zich in dit blok voordoen.

En in geval van uitzondering hebben we de mogelijkheid om de fout te Throw , dat wil zeggen deze terug te sturen naar de gebruiker of het intern in de code zelf te beheren.

Het Finally deel is de laatste code die, ongeacht de uitkomst zijn, als er een uitzondering is of niet, zal de code uit te voeren alvorens uit te gaan van het blok.

In het geval dat we uit de klok moeten springen, is er de Exit Try instructie die kan worden gebruikt. Maar ook hier wordt de code in de sectie Finally uitgevoerd voordat deze eindigt.

De syntaxis is eenvoudig;

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

waarbij alleen de Try and End Try verplicht is. De rest kan worden genegeerd, maar voeg als een goede gewoonte het gedeelte Finally , zelfs als dit leeg zou blijven.

Op de uitzondering na, zijn er verschillende soorten uitzonderingen die kunnen worden gevangen. Het zijn kant-en-klare uitzonderingen die beschikbaar zijn via het .Net Framework, zoals hieronder;

Uitzonderingsklasse Korte beschrijving
System.IO.IOException Verwerkt I / O-fouten
System.IndexOutOfRangeException Verwijst naar een matrixindex buiten bereik
System.ArrayTypeMismatchException Wanneer het type niet overeenkomt met het matrixtype
System.NullReferenceException Verwerkt fouten die worden gegenereerd door het verwijzen naar een null-object.
System.DivideByZeroException Verwerkt fouten die worden gegenereerd door een dividend met nul te delen.
System.InvalidCastException Verwerkt fouten die tijdens typecasting worden gegenereerd.
System.OutOfMemoryException Verwerkt fouten die worden gegenereerd door onvoldoende vrij geheugen.
System.StackOverflowException Verwerkt fouten die worden gegenereerd door stapeloverloop.
--------------------------- ------------------------


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow