Megosztás:


A Visual Basic újdonságai

Ez a cikk a Visual Basic minden verziójához felsorolja a főbb funkciók nevét. A nyelv legújabb verzióiban található új és továbbfejlesztett funkciók részletes leírását a csatolt szakaszokban találja.

Aktuális verzió

Visual Basic 17.13 / Visual Studio 2026
Az új funkciókért tekintse meg a Visual Basic 17.13-at.

A legújabb .NET SDK-t a .NET letöltési oldaláról töltheti le.

Korábbi verziók

Visual Basic 17.0 / Visual Studio 2022
Az új funkciókért tekintse meg a Visual Basic 17.0-s verziót.

Visual Basic 16.9 / Visual Studio 2019 16.9-es verzió
Az új funkciókért tekintse meg a Visual Basic 16.9-et.

Visual Basic 16.0 / Visual Studio 2019 16.0-s verzió
Az új funkciókért tekintse meg a Visual Basic 16.0-s verziót.

Visual Basic 15.5 / Visual Studio 2017 15.5-ös verzió
Az új funkciókért tekintse meg a Visual Basic 15.5-öt.

Visual Basic 15.3 / Visual Studio 2017 15.3-os verzió
Az új funkciókért tekintse meg a Visual Basic 15.3-at.

Visual Basic 15 / Visual Studio 2017
Az új funkciókért tekintse meg a Visual Basic 2017-et.

Visual Basic / Visual Studio 2015
Az új funkciókért tekintse meg a Visual Basic 14-et.

Visual Basic / Visual Studio 2013
A .NET Fordítóplatform (Roslyn) technológiai előzetesei

Visual Basic / Visual Studio 2012
Async és await kulcsszavak, iterátorok, hívóinformációs attribútumok

Visual Basic, Visual Studio 2010
Automatikusan implementált tulajdonságok, gyűjtemény inicializálói, implicit vonal folytatása, dinamikus, általános co/contra variancia, globális névtér-hozzáférés

Visual Basic / Visual Studio 2008
Language Integrated Query (LINQ), XML-literálok, helyi típusú következtetés, objektum-inicializálók, névtelen típusok, bővítménymetódusok, helyi var típusú következtetés, lambdakifejezések, operátor, if részleges metódusok, null értékű típusok

Visual Basic / Visual Studio 2005
A My típus- és segédtípusok (hozzáférés az alkalmazáshoz, számítógéphez, fájlrendszerhez, hálózathoz)

Visual Basic / Visual Studio .NET 2003
Bitváltó operátorok, ciklusváltozó deklarációja

Visual Basic / Visual Studio .NET 2002
A Visual Basic .NET első kiadása

Visual Basic 17.13

A Visual Basic 17.13 felismeri az általános kényszert unmanaged . A Visual Basic 17.13 felismeri a System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute metódusfeloldás módját.

Visual Basic 17.0

A Visual Basic 17.0 lehetővé teszi a System.Runtime.CompilerServices.CallerArgumentExpressionAttribute.

Visual Basic 16.9

A Visual Basic 16.9 lehetővé teszi a csak init-only tulajdonságok használatát.

Visual Basic 16.0

A Visual Basic 16.0 a Visual Basic Runtime (microsoft.visualbasic.dll) funkcióinak további funkcióit biztosítja a .NET Core-nak. Ez a Visual Basic első verziója, amely a .NET Core-ra összpontosít. A .NET Core 3.0 hozzáadja a Visual Basic Runtime Windows Formstól függő részeit.

A megjegyzések több helyen is engedélyezve vannak az utasításokban

A Visual Basic 15.5-ös és korábbi verzióiban csak üres sorokra, egy utasítás végén vagy adott olyan helyre adhat megjegyzéseket, amelyekben implicit sor folytatása engedélyezett. A Visual Basic 16.0-tól kezdve megjegyzéseket is hozzáadhat explicit sorok folytatásai után, valamint egy olyan sorra vonatkozó utasításon belül, amely egy szóközzel és aláhúzásjellel kezdődik.

Public Sub Main()
    cmd.CommandText = ' Comment is allowed here without _
        "SELECT * FROM Titles JOIN Publishers " _ ' This is a comment
        & "ON Publishers.PubId = Titles.PubID " _
 _ ' This is a comment on a line without code
        & "WHERE Publishers.State = 'CA'"
End Sub

Lebegőpontos és egész számra optimalizált átalakítás

A Visual Basic korábbi verzióiban a dupla és az egyértékű értékek egész számokra való konvertálása viszonylag gyenge teljesítményt nyújtott. A Visual Basic 16.0 jelentősen javítja a lebegőpontos konverziók teljesítményét egész számokra, amikor az alábbi módszerek bármelyike által visszaadott értéket átadja az egyik belső Visual Basic egész számkonvertálási függvénynek (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt és CULng), vagy ha a következő metódusok bármelyike által visszaadott érték implicit módon egy integrált típusra kerül, és a Szigorú beállítás értéke Offa következő:

Ez az optimalizálás lehetővé teszi, hogy a kód gyorsabban fusson – akár kétszer olyan gyorsan, mint az olyan kódok esetében, amelyek nagy számú konverziót végeznek egész számokra. Az alábbi példa néhány egyszerű metódushívást mutat be, amelyeket az optimalizálás érint:

Dim s As Single = 173.7619
Dim d As Double = s

Dim i1 As Integer = CInt(Fix(s))               ' Result: 173
Dim b1 As Byte = CByte(Int(d))                 ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s))     ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d))      ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s))        ' Result: 174

Ez az optimalizálás csonkolja a lebegőpontos értékeket, ahelyett, hogy kerekítené őket.

Visual Basic 15.5

Nem záró elnevezett argumentumok

A Visual Basic 15.3-ban és a korábbi verziókban, amikor egy metódushívás pozíció és név szerint is tartalmazott argumentumokat, a névvel ellátott argumentumok elé kellett helyeznie a pozícióargumentumokat. A Visual Basic 15.5-től kezdve a pozíció- és az elnevezett argumentumokat tetszőleges sorrendben kombinálhatja, amíg az utolsó pozícióargumentumig minden argumentum a megfelelő pozícióban van. Ez a rugalmasság különösen akkor hasznos, ha a névvel ellátott argumentumok olvashatóbbá teszik a kódot.

Az alábbi metódushívásnak például két pozícióargumentuma van egy elnevezett argumentum között. A névvel ellátott argumentum egyértelművé teszi, hogy a 19 érték egy kort jelöl.

StudentInfo.Display("Mary", age:=19, #9/21/1998#)

Private Protected taghozzáférés-módosító

Ez az új kulcsszókombináció egy tagot határoz meg, amelyhez a benne lévő osztály minden tagja hozzáférhet, valamint az azt tartalmazó osztályból származó típusokat, de csak akkor, ha azokat az adott szerelvényben is megtalálja. Mivel a struktúrák nem örökölhetők, csak az osztály tagjaira vonatkozhat Private Protected .

Vezető hexa/bináris/oktális elválasztó

A Visual Basic 2017 hozzátette az aláhúzásjel (_) támogatását számjegyelválasztóként. A Visual Basic 15.5-től kezdve az aláhúzásjelet használhatja vezető elválasztóként az előtag és a hexadecimális, bináris vagy oktális számjegyek között. Az alábbi példa egy vezető számjegyelválasztót használ a 3 271 948 384 hexadecimális számként való definiálásához:

Dim number As Integer = &H_C305_F860

Ha az aláhúzásjelet vezető elválasztóként szeretné használni, a következő elemet kell hozzáadnia a Visual Basic-projektfájlhoz (*.vbproj):

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

Visual Basic 15.3

Névvel ellátott következtetés

Amikor változókból rendeli hozzá a rekordelemek értékét, a Visual Basic a megfelelő változónevekből a rekordelemek nevét következteti. Nem kell egy tuple elemnek külön nevet adnia. Az alábbi példa következtetéssel hoz létre egy tuple-t, amely két elnevezett elemet tartalmaz: state és stateName.

Const state As String = "MI"
Const stateName As String = "Michigan"
Const capital As String = "Lansing"
Dim stateInfo = (state, stateName, capital)
Console.WriteLine($"{stateInfo.stateName}: 2-letter code: {stateInfo.State}, Capital {stateInfo.capital}")
' The example displays the following output:
'      Michigan: 2-letter code: MI, Capital Lansing

További fordítókapcsolók

A Visual Basic parancssori fordító mostantól támogatja a -refout és a -refonly fordító beállításait a referencia-szerelvények kimenetének szabályozásához. A -refout használatával definiálhatja a referencia-szerelvény kimeneti könyvtárát. A -refonly használatával megadhatja, hogy a fordítás csak egy referenciaszerelvényt adjon ki.

Visual Basic 15

Csuples

A Tuples egy egyszerű adatstruktúra, amelyet leggyakrabban egyetlen metódushívás több értékének visszaadására használ. Általában több értéket kell visszaadnia egy metódusból, az alábbi lehetőségek egyikét kell elvégeznie:

  • Egyéni típus definiálása (a Class vagy a Structure). Ez a lehetőség egy nagy erőforrás-igényű megoldás.

  • Adjon meg egy vagy több ByRef paramétert a metódusból származó érték visszaadása mellett.

A Visual Basic tuples-támogatása lehetővé teszi, hogy gyorsan definiáljon egy rekordot, opcionálisan szemantikai neveket rendeljen az értékeihez, és gyorsan lekérje az értékeit. Az alábbi példa körbefuttat egy metódusra irányuló TryParse hívást, és egy rekordot ad vissza.

Imports System.Globalization

Public Module NumericLibrary
    Public Function ParseInteger(value As String) As (Success As Boolean, Number As Integer)
        Dim number As Integer
        Return (Integer.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, number), number)
    End Function
End Module

Ezután meghívhatja a metódust, és az alábbi példához hasonló kóddal kezelheti a visszaadott tömböt.

Dim numericString As String = "123,456"
Dim result = ParseInteger(numericString)
Console.WriteLine($"{If(result.Success, $"Success: {result.Number:N0}", "Failure")}")
Console.ReadLine()
'      Output: Success: 123,456

Bináris literálok és számjegyelválasztók

Bináris literál definiálásához használja az előtagot &B vagy &ba . Emellett az aláhúzásjel karaktert _is használhatja számjegyelválasztóként az olvashatóság javítása érdekében. Az alábbi példa mindkét funkcióval hozzárendel egy Byte értéket, és decimális, hexadecimális és bináris számként jeleníti meg.

Dim value As Byte = &B0110_1110
Console.WriteLine($"{NameOf(value)}  = {value} (hex: 0x{value:X2}) " +
                  $"(binary: {Convert.ToString(value, 2)})")
' The example displays the following output:
'      value  = 110 (hex: 0x6E) (binary: 1101110)      

További információt a Bájt, Egész szám, Hosszú, Rövid, SByte, UInteger, ULong és UShort adattípusok "Konstans hozzárendelések" szakaszában talál.

C#-referencia visszatérési értékeinek támogatása

A C# támogatja a referencia-visszatérési értékeket. Vagyis amikor a hívó metódus hivatkozással visszaadott értéket kap, módosíthatja a hivatkozás értékét. A Visual Basic nem teszi lehetővé a hivatkozási visszatérési értékekkel rendelkező metódusok készítését, de lehetővé teszi a hivatkozás visszatérési értékeinek használatát és módosítását.

A C#-ban írt következő Sentence osztály például tartalmaz egy metódust FindNext , amely egy adott részstringgel kezdődő mondatban megkeresi a következő szót. A sztring hivatkozási visszatérési értékként lesz visszaadva, és a Boolean metódusra hivatkozva átadott változó jelzi, hogy a keresés sikeres volt-e. Ez azt jelenti, hogy a visszaadott érték olvasása mellett a hívó is módosíthatja azt, és ez a módosítás az Sentence osztályban is tükröződik.

using System;

public class Sentence
{
    private string[] words;
    private int currentSearchPointer;

    public Sentence(string sentence)
    {
        words = sentence.Split(' ');
        currentSearchPointer = -1;
    }

    public ref string FindNext(string startWithString, ref bool found)
    {
        for (int count = currentSearchPointer + 1; count < words.Length; count++)
        {
            if (words[count].StartsWith(startWithString))
            {
                currentSearchPointer = count;
                found = true;
                return ref words[currentSearchPointer];
            }
        }
        currentSearchPointer = -1;
        found = false;
        return ref words[0];
    }

    public string GetSentence()
    {
        string stringToReturn = null;
        foreach (var word in words)
            stringToReturn += $"{word} ";

        return stringToReturn.Trim();
    }
}

Legegyszerűbb formájában módosíthatja a mondatban található szót az alábbi példához hasonló kód használatával. Vegye figyelembe, hogy nem a metódushoz rendel értéket, hanem a metódus által visszaadott kifejezéshez, vagyis a referencia-visszatérési értékhez.

Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
sentence.FindNext("A", found) = "A good" 
Console.WriteLine(sentence.GetSentence()) 
' The example displays the following output:
'      A good time to see the world is now.

Ezzel a kóddal azonban az a probléma, hogy ha nem talál egyezést, a metódus az első szót adja vissza. Mivel a példa nem vizsgálja meg az Boolean argumentum értékét annak megállapításához, hogy talál-e egyezést, módosítja az első szót, ha nincs egyezés. Az alábbi példa úgy javítja ki ezt a problémát, hogy az első szót magára cseréli, ha nincs egyezés.

Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
sentence.FindNext("A", found) = IIf(found, "A good", sentence.FindNext("B", found)) 
Console.WriteLine(sentence.GetSentence()) 
' The example displays the following output:
'      A good time to see the world is now.

Jobb megoldás egy segédmetódus használata, amelynek a referencia visszatérési értékét hivatkozással adja át. A segédmetódus ezután hivatkozással módosíthatja a neki átadott argumentumot. Az alábbi példa ezt teszi.

Module Example
   Public Sub Main()
      Dim sentence As New Sentence("A time to see the world is now.")
      Dim found = False
      Dim returns = RefHelper(sentence.FindNext("A", found), "A good", found) 
      Console.WriteLine(sentence.GetSentence()) 
   End Sub
   
   Private Function RefHelper(ByRef stringFound As String, replacement As String, success As Boolean) _ 
                    As (originalString As String, found As Boolean) 
      Dim originalString = stringFound
      If found Then stringFound = replacement
      Return (originalString, found)   
   End Function
End Module
' The example displays the following output:
'      A good time to see the world is now.

További információ: Visszatérési referenciaértékek.

Visual Basic 14

NameOf

Egy típus vagy tag nem minősített sztringnevét lekérheti egy hibaüzenetben való használatra, sztring kemény kódolása nélkül. Ez a módszer megőrzi a kód helyességét az újrabontáskor. Ez a funkció a modellnézet-vezérlő MVC-kapcsolatainak csatlakoztatásához és a tulajdonságváltozások aktiválásához is hasznos.

Sztring interpolációja

Sztringek létrehozásához használjon sztringinterpolációs kifejezéseket. Az interpolált sztringkifejezések kifejezéseket tartalmazó sablonsztringnek tűnnek. Az interpolált sztringek az összetett formázásnál egyszerűbben értelmezhetők az argumentumok tekintetében.

Null feltételes taghozzáférés és indexelés

Egy taghozzáférési () vagy indexelési (?.?[]) művelet végrehajtása előtt nagyon könnyű szintaktikai módon tesztelheti a null értéket. Ezek az operátorok segítenek kevesebb kódot írni a null ellenőrzések kezeléséhez, különösen az adatstruktúrákba való csökkenő műveletekhez. Ha a bal oldali operandus vagy objektumhivatkozás null értékű, a műveletek null értéket adnak vissza.

Többsoros sztringkonstansok

A sztringkonstansok tartalmazhatnak újsoros sorozatokat. Már nincs szüksége a régi kerülő megoldásra a használathoz <xml><![CDATA[...text with newlines...]]></xml>.Value.

Comments

Megjegyzéseket az implicit sor-folytatások után, az inicializáló kifejezéseken belül és a LINQ kifejezési kifejezések között is elhelyezhet.

Intelligensebb, teljes névfeloldás

Adott kód, például Threading.Thread.Sleep(1000), esetén a Visual Basic a "Threading" névtér keresésekor felismerte, hogy az System.Threading és System.Windows.Threading között kétértelműség van, majd errort jelentett. A Visual Basic mostantól mindkét lehetséges névteret együtt veszi figyelembe. Ha a befejezési listát jeleníti meg, a Visual Studio szerkesztője a befejezési listában mindkét típusból listázza a tagokat.

Év első dátumkonstansai

A dátumkonstansok yyyy-mm-dd formátumban #2015-03-17 16:10 PM#is lehetnek.

Az illesztő tulajdonságainak olvashatósága

Az interfész írásvédett tulajdonságait írás- és olvasható tulajdonságok használatával is megvalósíthatja. Az interfész garantálja a minimális funkcionalitást, és nem akadályozza meg, hogy egy implementáló osztály lehetővé teszi a tulajdonság beállítását.

TypeOf <expr> IsNot <típus>

A kód olvashatósága érdekében mostantól használhatja TypeOf a következőt IsNot: .

#Disable figyelmeztető <azonosító> és #Enable figyelmeztető <azonosító>

A forrásfájl egyes régióira vonatkozó figyelmeztetések letilthatók és engedélyezhetők.

XML-dokumentum megjegyzéseinek fejlesztései

Dokumentációs megjegyzések írásakor intelligens szerkesztőt és támogatást kap a paraméternevek ellenőrzéséhez, a crefs megfelelő kezeléséhez (például általános típusok és operátorok), a színezéshez és a refaktoráláshoz.

Részleges modul- és felületdefiníciók

Az osztályok és a szerkezetek mellett részleges modulokat és interfészeket is deklarálhat.

#Region metódustesteken belüli irányelvek

Elhelyezhet #Region...#End régióelválasztókat a fájl bármely pontjára, a függvények belsejébe, és akár a függvénytestekre is kiterjedően.

A felülbírálások definíciói implicit módon túlterheltek

Ha hozzáadja a Overrides módosítót egy definícióhoz, a fordító implicit módon hozzáadja Overloads , hogy kevesebb kódot írjon be gyakori esetekben.

Az attribútumargumentumokban engedélyezett CObj

Mostantól attribútumargumentumokban is használható CObj(...) . Korábban a fordító hibát jelzett, azt mondta, hogy nem egy konstans.

Nem egyértelmű metódusok deklarálása és felhasználása különböző felületekről

Korábban a következő kód olyan hibákat adott vissza, amelyek megakadályozták a deklarálást IMock vagy a hívást GetDetails (ha ezek a metódusok C#-ban lettek deklarálva):

Interface ICustomer
  Sub GetDetails(x As Integer)
End Interface

Interface ITime
  Sub GetDetails(x As String)
End Interface

Interface IMock : Inherits ICustomer, ITime
  Overloads Sub GetDetails(x As Char)
End Interface

Interface IMock2 : Inherits ICustomer, ITime
End Interface

Most a fordító normál túlterhelésfeloldási szabályokat használ a híváshoz legmegfelelőbb GetDetails metódus kiválasztásához. A Visual Basicben az illesztőkapcsolatokat a mintában láthatóhoz hasonlóan deklarálhatja.

Lásd még