Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a Visual Basic minden verziójához tartalmazza a főbb funkciók nevét, és részletes leírást tartalmaz a nyelv legújabb verzióinak új és továbbfejlesztett funkcióiról.
Aktuális verzió
Visual Basic 16.9 / Visual Studio 2019 16.9-es verzió
Az új funkciókért tekintse meg a Visual Basic 16.9-et.
A legújabb .NET SDK-t a .NET letöltési oldaláról töltheti le.
Korábbi verziók
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 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) további funkcióinak a .NET Core-ba való biztosítására összpontosít, és a Visual Basic első verziója, amely a .NET Core-ra összpontosít. A Visual Basic Runtime WinFormstól függő részei a .NET Core 3.0-ban lettek hozzáadva.
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 a megjegyzések csak üres sorokban, egy utasítás végén vagy egy utasítás azon bizonyos helyeiben engedélyezettek, ahol implicit sor folytatása engedélyezett. A Visual Basic 16.0-tól kezdődően a megjegyzések explicit sor-folytatások után is engedélyezettek, valamint egy 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, CULng), vagy ha a következő metódusok bármelyike által visszaadott érték implicit módon egy integrál típusba kerül, ha az Option Strict értéke Offa következő:
- Conversion.Fix(Double)
- Conversion.Fix(Object)
- Conversion.Fix(Single)
- Conversion.Int(Double)
- Conversion.Int(Object)
- Conversion.Int(Single)
- Math.Ceiling(Double)
- Math.Floor(Double)
- Math.Round(Double)
- Math.Truncate(Double)
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ámtípusokra. Az alábbi példa néhány egyszerű metódushívást mutat be, amelyeket ez 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
Vegye figyelembe, hogy ez csonkolja a lebegőpontos értékek kerekítése helyett.
Visual Basic 15.5
Nem záró elnevezett argumentumok
A Visual Basic 15.3-ban és korábbi verzióiban, amikor egy metódushívás pozíció és név szerint is tartalmazott argumentumokat, a pozícióargumentumoknak elnevezett argumentumokat kellett megelőznie. A Visual Basic 15.5-től kezdve a pozíció és a névvel ellátott argumentumok tetszőleges sorrendben megjelenhetnek, amennyiben az utolsó pozícióargumentumig minden argumentum a megfelelő pozícióban van. Ez különösen akkor hasznos, ha elnevezett argumentumokkal olvashatóbbá teszi 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 olyan tagot határoz meg, amely a benne lévő osztály összes tagja számára elérhető, valamint az azt tartalmazó osztályból származó típusok szerint, de csak akkor, ha azokat az adott szerelvényben is megtalálja. Mivel a struktúrák nem örökölhetők, Private Protected csak az osztály tagjaira alkalmazhatók.
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
Ha változókból rendeli hozzá a rekordelemek értékét, a Visual Basic a megfelelő változónevekből következtet a rekordelemek nevére; nem kell explicit módon nevet adnia egy rovátkás elemnek. Az alábbi példa következtetéssel hoz létre egy rekordot három elnevezett elemet, statestateNameés capital.
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 a referenciaszerelvény kimeneti könyvtárát határozza meg, a -refonly pedig azt határozza meg, hogy csak egy referenciaszerelvény legyen fordítással kimenet.
Visual Basic 15
A Tuples egy egyszerű adatstruktúra, amelyet leggyakrabban egyetlen metódushívás több értékének visszaadására használnak. Általában több értéket kell visszaadnia egy metódusból, az alábbiak egyikét kell elvégeznie:
Egyéni típus definiálása (a
Classvagy aStructure). Ez egy nehézsúlyú megoldás.Adjon meg egy vagy több
ByRefparamé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ábbihoz hasonló kóddal kezelheti a visszaadott rekordot.
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é, hogy hivatkozási visszatérési értékekkel rendelkező metódusokat szerkesszen, 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 az alábbi kóddal módosíthatja a mondatban található szót. Vegye figyelembe, hogy nem a metódushoz rendel értéket, hanem a metódus által visszaadott kifejezéshez, amely a referencia visszatérési értéke.
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 ezt úgy javítja ki, 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
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 lehetővé teszi, hogy a kód helyes maradjon 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ós kifejezésekkel sztringeket hozhat létre. 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.
A sztringkonstansok tartalmazhatnak újsoros sorozatokat. Már nincs szüksége a régi munka körül a használat <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)a Visual Basic a "Szálkezelés" névtér kereséséhez, a System.Threading és a System.Windows.Threading közötti kétértelműség felderítése, majd hiba bejelentése. 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 írásvédett tulajdonságokat írásvédett tulajdonsággal implementálhatja. 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.
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
A dokumentum megjegyzéseinek írásakor intelligens szerkesztőt kap, és támogatást kap a paraméternevek ellenőrzéséhez, a megfelelő kezeléshez crefs (általános adatok, operátorok stb.), a színezéshez és az újrabontá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
A fordító azt a hibát adta, hogy a CObj(...) nem állandó, amikor attribútumszerkezetekben használják.
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 eredményezett, amelyek megakadályozták a deklarálást IMock vagy a hívást GetDetails (ha ezek 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 megoldás kiválasztásához, és a Visual Basicben is deklarálhatja a felületi kapcsolatokat, mint a mintában látható.