Co je nového pro Visual Basic
Toto téma obsahuje seznam klíčových názvů funkcí pro každou verzi Visual Basic s podrobnými popisy nových a vylepšených funkcí v nejnovějších verzích jazyka.
Aktuální verze
Visual Basic 16.9 / Visual Studio 2019 verze 16.9
Nové funkce najdete v tématu Visual Basic 16.9.
Nejnovější sadu .NET SDK si můžete stáhnout ze stránky pro stahování .NET.
Předchozí verze
Visual Basic 16.0 / Visual Studio 2019 verze 16.0
Nové funkce najdete v tématu Visual Basic 16.0.
Visual Basic 15.5 / Visual Studio 2017 verze 15.5
Nové funkce najdete v tématu Visual Basic 15.5.
Visual Basic 15.3 / Visual Studio 2017 verze 15.3
Nové funkce najdete v tématu Visual Basic 15.3.
Visual Basic 15 / Visual Studio 2017
Informace o nových funkcích najdete v tématu Visual Basic 2017.
Visual Basic / Visual Studio 2015
Nové funkce najdete v tématu Visual Basic 14.
Visual Basic / Visual Studio 2013
Ukázky technologií .NET Compiler Platform ("Roslyn")
Visual Basic / Visual Studio 2012
Async
a await
klíčová slova, iterátory, atributy informací o volajícím
Visual Basic, Visual Studio 2010
Automaticky implementované vlastnosti, inicializátory kolekcí, implicitní pokračování řádku, dynamické, obecná odchylka co/contra, globální přístup k oboru názvů
Visual Basic / Visual Studio 2008
LinQ (Language Integrated Query), literály XML, odvozování místního typu, inicializátory objektů, anonymní typy, rozšiřující metody, odvozování místního var
typu, výrazy lambda, operátor, if
částečné metody, typy hodnot s možnou hodnotou null
Visual Basic / Visual Studio 2005
Typy My
typů a pomocných rutin (přístup k aplikaci, počítači, systému souborů, síti)
Visual Basic / Visual Studio .NET 2003
Operátory bitového posunu, deklarace proměnné smyčky
Visual Basic / Visual Studio .NET 2002
První verze Visual Basic .NET
Visual Basic 16,9
Visual Basic 16,9 umožňuje spotřebu vlastností pouze pro inicializaci.
Visual Basic 16.0
Visual Basic 16.0 se zaměřuje na poskytování dalších funkcí modulu Visual Basic Runtime (microsoft.visualbasic.dll) pro .NET Core a je první verzí Visual Basic zaměřenou na .NET Core. Mnoho částí modulu Visual Basic Runtime závisí na WinForms a tyto části budou přidány v novější verzi Visual Basic.
Komentáře povolené na více místech v příkazech
V Visual Basic 15.8 a starších verzích jsou komentáře povoleny pouze na prázdných řádcích, na konci příkazu nebo na konkrétních místech v příkazu, kde je povoleno implicitní pokračování řádku. Počínaje Visual Basic 16.0 jsou komentáře také povoleny po explicitních pokračováních řádků a v příkazu na řádku začínajícím mezerou následovanou podtržítkem.
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
Optimalizované převody s plovoucí deseti čárkou na celé číslo
V předchozích verzích Visual Basic nabídl převod hodnot Double a Single na celá čísla relativně nízký výkon. Visual Basic 15,8 výrazně zvyšuje výkon převodů s plovoucí desetinnou čárkou na celá čísla, když předáte hodnotu vrácenou některou z následujících metod jedné z následujících metod jedné z vnitřních Visual Basic celočíselné převodní funkce (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt), nebo pokud je hodnota vrácená některou z následujících metod implicitně přetypována na celočíselný typ, když Možnost Strict je nastavena na Off
:
- 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)
Tato optimalizace umožňuje rychlejší spouštění kódu – až dvakrát rychleji pro kód, který provede velký počet převodů na celočíselné typy. Následující příklad ukazuje několik jednoduchých volání metod, která jsou ovlivněna touto optimalizací:
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
Všimněte si, že se tím zkracuje místo zaokrouhlení hodnot s plovoucí desetinnou čárkou.
Visual Basic 15,5
Nekoncové pojmenované argumenty
V Visual Basic 15.3 a starších verzích, kdy volání metody obsahovalo argumenty podle pozice i názvu, musely argumenty pozice před pojmenovanými argumenty. Počínaje Visual Basic 15,5 se mohou poziční a pojmenované argumenty zobrazovat v libovolném pořadí, pokud jsou všechny argumenty až do posledního pozičního argumentu ve správné pozici. To je užitečné zejména v případě, že se pojmenované argumenty používají k tomu, aby byl kód čitelnější.
Například následující volání metody má dva poziční argumenty mezi pojmenovaným argumentem. Pojmenovaný argument znamená, že hodnota 19 představuje věk.
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
Private Protected
Modifikátor přístupu člena
Tato nová kombinace klíčových slov definuje člen, který je přístupný všemi členy v jeho obsahující třídě a také typy odvozené z obsahující třídy, ale pouze pokud jsou nalezeny také v obsahující sestavení. Vzhledem k tomu, že struktury nelze dědit, Private Protected
lze je použít pouze na členy třídy.
Počáteční šestnáctkový/osmičkový oddělovač
Visual Basic 2017 jsme přidali podporu znaku podtržítka (_
) jako oddělovače číslic. Počínaje Visual Basic 15,5 můžete znak podtržítka použít jako počáteční oddělovač mezi předponou a šestnáctkovou, binární nebo osmičkovou číslicí. Následující příklad používá počáteční oddělovač číslic k definování 3 271 948 384 jako šestnáctkové číslo:
Dim number As Integer = &H_C305_F860
Pokud chcete použít znak podtržítka jako počáteční oddělovač, musíte do souboru projektu Visual Basic (*.vbproj) přidat následující prvek:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Visual Basic 15,3
Odvození pojmenované kolekce členů
Když přiřadíte hodnotu elementů řazené kolekce členů z proměnných, Visual Basic odvodí název elementů řazené kolekce členů z odpovídajících názvů proměnných; nemusíte explicitně pojmenovat element řazené kolekce členů. Následující příklad používá odvozovat k vytvoření řazené kolekce členů se třemi pojmenovanými prvky, state
, stateName
a 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
Další přepínače kompilátoru
Kompilátor příkazového řádku Visual Basic nyní podporuje možnosti kompilátoru -refout a -refonly pro řízení výstupu referenčních sestavení. -refout definuje výstupní adresář referenčního sestavení a -refonly určuje, že pouze referenční sestavení má být výstupem kompilací.
Visual Basic 15
Řazené kolekce členů jsou jednoduchá datová struktura, která se nejčastěji používá k vrácení více hodnot z jednoho volání metody. Obvykle platí, že pokud chcete vrátit více hodnot z metody, musíte udělat jednu z těchto věcí:
Definujte vlastní typ (
Class
neboStructure
). Jedná se o těžké řešení.Kromě vrácení hodnoty z metody definujte jeden nebo více
ByRef
parametrů.
Visual Basic podpora řazených kolekcí členů umožňuje rychle definovat řazenou kolekci členů, volitelně přiřadit sémantické názvy k hodnotám a rychle načíst jeho hodnoty. Následující příklad zabalí volání TryParse metody a vrátí řazenou kolekci členů.
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
Pak můžete metodu volat a zpracovat vrácenou řazenou kolekci členů s kódem následujícím způsobem.
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ární literály a oddělovače číslic
Binární literál můžete definovat pomocí předpony &B
nebo &b
. Kromě toho můžete jako oddělovač číslic použít podtržítko _
, abyste zlepšili čitelnost. Následující příklad používá obě funkce k přiřazení Byte
hodnoty a k zobrazení jako desítkové, šestnáctkové a binární číslo.
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)
Další informace najdete v části "Přiřazení literálů" datových typů Byte, Integer, Long, Short, SByte, UInteger, ULong a UShort.
Počínaje jazykem C# 7.0 jazyk C# podporuje návratové hodnoty odkazů. To znamená, že když volající metoda obdrží hodnotu vrácenou odkazem, může změnit hodnotu odkazu. Visual Basic neumožňuje vytvářet metody s návratovými hodnotami odkazu, ale umožňuje využívat a upravovat návratové hodnoty odkazu.
Například následující Sentence
třída napsaná v jazyce C# obsahuje metodu FindNext
, která najde další slovo ve větě, která začíná zadaným podřetětím. Řetězec se vrátí jako návratová hodnota odkazu a Boolean
proměnná předaná odkazem na metodu označuje, zda bylo hledání úspěšné. To znamená, že kromě čtení vrácené hodnoty může volající také upravit a tato úprava se projeví ve Sentence
třídě.
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();
}
}
V nejjednodušší podobě můžete upravit slovo, které najdete ve větě, pomocí kódu, jako je následující. Všimněte si, že k metodě nepřiřazujete hodnotu, ale spíše k výrazu, který metoda vrátí, což je návratová hodnota odkazu.
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.
Problém s tímto kódem je, že pokud shoda nebyla nalezena, metoda vrátí první slovo. Vzhledem k tomu, že příklad nezkoumá hodnotu argumentu Boolean
a určí, zda je nalezena shoda, upraví první slovo, pokud neexistuje shoda. Následující příklad to opraví nahrazením prvního slova samotným, pokud neexistuje shoda.
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.
Lepším řešením je použít pomocnou metodu, do které je vrácená referenční hodnota předána odkazem. Pomocná metoda pak může upravit argument předaný odkazem. Následující příklad to dělá.
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.
Další informace naleznete v tématu Referenční návratové hodnoty.
Visual Basic 14
Můžete získat nekvalifikovaný název řetězce typu nebo člena pro použití v chybové zprávě bez pevného kódování řetězce. To umožňuje, aby kód zůstal při refaktoringu správný. Tato funkce je také užitečná pro připojení odkazů MVC pro model-view-controller a aktivaci událostí změněných vlastností.
K vytvoření řetězců můžete použít výrazy interpolace řetězců. Interpolovaný řetězcový výraz vypadá jako řetězec šablony, který obsahuje výrazy. Interpolovaný řetězec je srozumitelnější s ohledem na argumenty než složené formátování.
Přístup a indexování členů s podmínkou null
Před provedením operace přístupu k členům () nebo indexu?[]
(?.
) můžete otestovat hodnotu null velmi lehkým syntaktickým způsobem. Tyto operátory pomáhají psát méně kódu pro zpracování kontrol null, zejména pro sestupné do datových struktur. Pokud je levý operand nebo odkaz na objekt null, operace vrátí hodnotu null.
Řetězcové literály s více řádky
Řetězcové literály můžou obsahovat sekvence newline. Už nepotřebujete starou práci s používáním <xml><![CDATA[...text with newlines...]]></xml>.Value
Komentáře
Komentáře můžete umístit za implicitní pokračování řádku, uvnitř výrazů inicializátoru a mezi výrazy LINQ.
Inteligentnější plně kvalifikovaný překlad názvů
Vzhledem k tomu, že kód, například Threading.Thread.Sleep(1000)
, Visual Basic použitý k vyhledání oboru názvů Threading, zjistil, že mezi System.Threading a System.Windows bylo nejednoznačné. Vlákno a pak nahlásit chybu. Visual Basic nyní považuje oba možné obory názvů dohromady. Pokud zobrazíte seznam dokončení, editor Visual Studio vypíše členy z obou typů v seznamu dokončení.
Literály kalendářního data prvního roku
Můžete mít literály kalendářních dat ve formátu rrrr-mm-dd, #2015-03-17 16:10 PM#
.
Vlastnosti rozhraní jen pro čtení
Vlastnosti rozhraní jen pro čtení můžete implementovat pomocí vlastnosti readwrite. Rozhraní zaručuje minimální funkčnost a nezastaví implementaci třídy, aby byla vlastnost nastavena.
Pro lepší čitelnost kódu teď můžete použít TypeOf
s IsNot
.
ID> upozornění #Disable a ID upozornění #Enable <<>
Můžete zakázat a povolit konkrétní upozornění pro oblasti ve zdrojovém souboru.
Vylepšení komentářů dokumentu XML
Při psaní komentářů k dokumentu získáte inteligentní editor a podporu sestavení pro ověřování názvů parametrů, správné zpracování crefs
(obecné typy, operátory atd.), obarvení a refaktoring.
Částečné definice modulů a rozhraní
Kromě tříd a struktur můžete deklarovat částečné moduly a rozhraní.
direktivy #Region uvnitř orgánů metod
Oddělovače oblastí #Region...#End oblasti můžete umístit kamkoli do souboru, uvnitř funkcí a dokonce i přes oblasti napříč tělemi funkcí.
Definice přepsání jsou implicitně přetížené.
Pokud do definice přidáte Overrides
modifikátor, kompilátor implicitně přidá Overloads
, abyste mohli v běžných případech zadat méně kódu.
CObj povolené v argumentech atributů
Kompilátor použitý k zadání chyby, že CObj(...) nebyl při použití při vytváření atributů konstantou.
Deklarace a využívání nejednoznačných metod z různých rozhraní
Dříve následující kód přinesl chyby, které vám zabránily v deklarování IMock
nebo volání GetDetails
(pokud byly deklarovány v jazyce C#):
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
Teď kompilátor použije normální pravidla překladu přetížení k výběru nejvhodnějšího GetDetails
pro volání a můžete deklarovat relace rozhraní v Visual Basic jako ty, které jsou znázorněny v ukázce.