Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule wymieniono kluczowe nazwy funkcji dla każdej wersji języka Visual Basic. Aby uzyskać szczegółowe opisy nowych i rozszerzonych funkcji w najnowszych wersjach języka, zobacz połączone sekcje.
Bieżąca wersja
Visual Basic 17.13 / Visual Studio 2026
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 17.13.
Najnowszy zestaw .NET SDK można pobrać ze strony pobierania platformy .NET.
Poprzednie wersje
Visual Basic 17.0 / Visual Studio 2022
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 17.0.
Visual Basic 16.9 / Visual Studio 2019 w wersji 16.9
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 16.9.
Visual Basic 16.0 / Visual Studio 2019 w wersji 16.0
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 16.0.
Visual Basic 15.5 / Visual Studio 2017 w wersji 15.5
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 15.5.
Visual Basic 15.3 / Visual Studio 2017 w wersji 15.3
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 15.3.
Visual Basic 15 / Visual Studio 2017
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 2017.
Visual Basic/ Visual Studio 2015
Aby uzyskać informacje o nowych funkcjach, zobacz Visual Basic 14.
Visual Basic/ Visual Studio 2013
Wersje zapoznawcze technologii platformy kompilatora .NET ("Roslyn")
Visual Basic/ Visual Studio 2012
Async i await słowa kluczowe, iteratory, atrybuty informacji o obiekcie wywołującym
Visual Basic, Visual Studio 2010
Automatycznie zaimplementowane właściwości, inicjatory kolekcji, niejawna kontynuacja wiersza, dynamiczny, ogólny co/contra variance, globalny dostęp do przestrzeni nazw
Visual Basic/ Visual Studio 2008
Zapytanie zintegrowane z językiem (LINQ), literały XML, wnioskowanie typu lokalnego, inicjatory obiektów, typy anonimowe, metody rozszerzeń, wnioskowanie typu lokalnego var , wyrażenia lambda, if operator, metody częściowe, typy wartości dopuszczanych do wartości null
Visual Basic/ Visual Studio 2005
My Typy typów i pomocnika (dostęp do aplikacji, komputera, systemu plików, sieci)
Visual Basic/Visual Studio .NET 2003
Operatory przesunięcia bitowego, deklaracja zmiennej pętli
Visual Basic/Visual Studio .NET 2002
Pierwsza wersja programu Visual Basic .NET
Visual Basic 17.13
Program Visual Basic 17.13 rozpoznaje unmanaged ograniczenie ogólne. Program Visual Basic 17.13 rozpoznaje System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute dla rozwiązywania metod.
Visual Basic 17.0
Program Visual Basic 17.0 włącza element System.Runtime.CompilerServices.CallerArgumentExpressionAttribute.
Visual Basic 16.9
Program Visual Basic 16.9 umożliwia użycie właściwości tylko do inicjowania.
Visual Basic 16.0
Visual Basic 16.0 koncentruje się na dostarczaniu większej liczby funkcji środowiska Visual Basic Runtime (microsoft.visualbasic.dll) do platformy .NET Core. Jest to pierwsza wersja języka Visual Basic skoncentrowana na platformie .NET Core. Platforma .NET Core 3.0 dodaje części środowiska uruchomieniowego Visual Basic, które są zależne od formularzy systemu Windows.
Komentarze dozwolone w większej ilości miejsc w instrukcjach
W języku Visual Basic 15.5 i starszych wersjach można dodawać komentarze tylko na pustych wierszach, na końcu instrukcji lub w określonych miejscach w instrukcji, w których dozwolona jest niejawna kontynuacja wiersza. Począwszy od języka Visual Basic 16.0, można również dodawać komentarze po jawnych kontynuacjach wiersza i w instrukcji w wierszu rozpoczynającym się od spacji, po której następuje podkreślenie.
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
Zoptymalizowana konwersja zmiennoprzecinkowa na liczbę całkowitą
W poprzednich wersjach języka Visual Basic konwersja wartości Double i Single na liczby całkowite oferowała stosunkowo niską wydajność. Visual Basic 16.0 znacznie zwiększa wydajność konwersji liczb zmiennoprzecinkowych na całkowite po przekazaniu wartości zwracanej przez dowolną z poniższych metod do jednej z funkcji konwersji liczb całkowitych w Visual Basic (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt i CULng) lub gdy wartość zwracana przez dowolną z poniższych metod jest niejawnie rzutowana na typ całkowity, a Option Strict jest ustawiona 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)
Ta optymalizacja umożliwia szybsze uruchamianie kodu — nawet dwa razy szybciej w przypadku kodu, który wykonuje dużą liczbę konwersji na typy całkowite. Poniższy przykład ilustruje kilka prostych wywołań metod, które ma wpływ na optymalizację:
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
Ta optymalizacja obcina zamiast zaokrągla wartości zmiennoprzecinkowe.
Visual Basic 15.5
Argumenty nazwane inne niż końcowe
W języku Visual Basic 15.3 i starszych wersjach, gdy wywołanie metody obejmowało argumenty zarówno według pozycji, jak i nazwy, trzeba było umieścić argumenty pozycyjne przed nazwami argumentów. Począwszy od języka Visual Basic 15.5, można mieszać argumenty pozycyjne i nazwane w dowolnej kolejności, o ile wszystkie argumenty do ostatniego argumentu pozycyjnego znajdują się w prawidłowej pozycji. Ta elastyczność jest szczególnie przydatna, gdy argumenty nazwane sprawiają, że kod jest bardziej czytelny.
Na przykład następujące wywołanie metody ma dwa argumenty pozycyjne między nazwanym argumentem. Nazwany argument wyjaśnia, że wartość 19 reprezentuje wiek.
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
Private Protected modyfikator dostępu do składowych
Ta nowa kombinacja słowa kluczowego definiuje składową, do której mogą uzyskiwać dostęp wszystkie elementy członkowskie w swojej klasie zawierającej, a także typy pochodzące z zawierającej klasy, ale tylko wtedy, gdy znajdują się one również w zestawie zawierającym. Ponieważ struktury nie mogą być dziedziczone, można stosować Private Protected tylko do składowych klasy.
Wiodący separator szesnastkowy/binarny/ósemkowy
Program Visual Basic 2017 dodał obsługę znaku podkreślenia (_) jako separatora cyfr. Począwszy od języka Visual Basic 15.5, można użyć znaku podkreślenia jako separatora wiodącego między prefiksem a cyframi szesnastkowymi, binarnymi lub ósemkowymi. W poniższym przykładzie użyto separatora cyfr wiodących do zdefiniowania 3 271 948 384 jako liczby szesnastkowej:
Dim number As Integer = &H_C305_F860
Aby użyć znaku podkreślenia jako separatora wiodącego, należy dodać następujący element do pliku projektu Visual Basic (*.vbproj):
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Visual Basic 15.3
Wnioskowanie o nazwanych krotkach
Po przypisaniu wartości elementów krotki ze zmiennych program Visual Basic wywnioskuje nazwę elementów krotki z odpowiednich nazw zmiennych. Nie musisz określać nazwy elementu krotki jednoznacznie. W poniższym przykładzie użyto wnioskowania, aby utworzyć krotkę z dwoma nazwanymi elementami: state i 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
Dodatkowe przełączniki kompilatora
Kompilator wiersza polecenia języka Visual Basic obsługuje teraz opcje kompilatora -refout i -refonly w celu kontrolowania danych wyjściowych zestawów odwołań. Użyj -refout , aby zdefiniować katalog wyjściowy zestawu referencyjnego. Użyj -refonly , aby określić, że kompilacja wyprowadza tylko zestaw referencyjny.
Visual Basic 15
Krotki to uproszczona struktura danych, której najczęściej używasz do zwracania wielu wartości z jednego wywołania metody. Zwykle, aby zwrócić więcej wartości z jednej metody, należy wykonać jeden z następujących sposobów:
Definiowanie typu niestandardowego (a
Classlub ).StructureTa opcja jest rozwiązaniem wagi ciężkiej.Zdefiniuj co najmniej jeden
ByRefparametr, oprócz zwracania wartości z metody .
Obsługa krotek w języku Visual Basic umożliwia szybkie definiowanie krotki, opcjonalnie przypisywanie nazw semantycznych do jej wartości i szybkie pobieranie ich wartości. Poniższy przykład opakowuje wywołanie TryParse metody i zwraca krotkę.
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
Następnie możesz wywołać metodę i obsłużyć zwróconą krotkę za pomocą kodu, jak w poniższym przykładzie.
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
Literały binarne i separatory cyfr
Literał binarny można zdefiniować przy użyciu prefiksu &B lub &b. Ponadto można użyć znaku podkreślenia , _jako separatora cyfr, aby zwiększyć czytelność. W poniższym przykładzie użyto obu funkcji do przypisania Byte wartości i wyświetlenia jej jako liczby dziesiętnej, szesnastkowej i binarnej.
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)
Aby uzyskać więcej informacji, zobacz sekcję "Przypisania literału" typów danych Byte, Integer, Long, Short, SByte, UInteger, ULong i UShort .
Obsługa zwracanych wartości odwołania w języku C#
Język C# obsługuje wartości zwracane przez odwołanie. Oznacza to, że gdy metoda wywołująca odbiera wartość zwróconą przez odwołanie, może zmienić wartość odwołania. Visual Basic nie pozwala na definiowanie metod zwracających wartości przez odwołanie, ale umożliwia korzystanie i modyfikowanie tych wartości.
Na przykład następująca Sentence klasa napisana w języku C# zawiera metodę FindNext , która znajduje następne słowo w zdaniu rozpoczynającym się od określonego podciągnięcia. Ciąg jest zwracany jako wartość zwracana przez odwołanie, a Boolean zmienna przekazana przez odwołanie do metody wskazuje, czy wyszukiwanie zakończyło się pomyślnie. Oznacza to, że oprócz odczytywania zwróconej wartości obiekt wywołujący może go również modyfikować i że modyfikacja jest odzwierciedlana w Sentence klasie.
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();
}
}
W najprostszej formie można zmodyfikować wyraz znaleziony w zdaniu przy użyciu kodu podobnego do poniższego przykładu. Pamiętaj, że nie przypisujesz wartości do metody, ale raczej do wyrażenia, które zwraca metoda, czyli wartości zwrotnej przez odwołanie.
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.
Jednak problem z tym kodem polega na tym, że jeśli dopasowanie nie zostanie znalezione, metoda zwróci pierwsze słowo. Ponieważ przykład nie sprawdza wartości argumentu Boolean , aby określić, czy znaleziono dopasowanie, modyfikuje pierwsze słowo, jeśli nie ma dopasowania. Poniższy przykład rozwiązuje ten problem, zastępując pierwsze słowo nim samym, jeśli nie ma dopasowania.
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.
Lepszym rozwiązaniem jest użycie metody pomocniczej, do której jest przekazywana wartość zwracana przez odwołanie. Metoda pomocnika może następnie zmodyfikować argument przekazany do niego przez odwołanie. Poniższy przykład to robi.
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.
Aby uzyskać więcej informacji, zobacz Odwołania wartości zwracane.
Visual Basic 14
Możesz uzyskać niekwalifikowaną nazwę ciągu typu lub elementu członkowskiego do użycia w komunikacie o błędzie bez kodowania ciągu. Takie podejście zapewnia poprawność kodu podczas refaktoryzacji. Ta funkcja jest również przydatna do podłączania łączy MVC kontrolera modelu i wyzwalania zdarzeń zmienionych właściwości.
Użyj wyrażeń interpolacji ciągów do konstruowania ciągów. Wyrażenie ciągu interpolowanego wygląda jak ciąg szablonu zawierający wyrażenia. Ciąg interpolowany jest łatwiejszy do zrozumienia w odniesieniu do argumentów niż formatowanie złożone.
Dostęp warunkowy do składowych o wartości null i indeksowanie
Wartości null można przetestować w bardzo lekki sposób składni przed wykonaniem operacji dostępu do składowej (?.) lub indeksu (?[]). Te operatory ułatwiają pisanie mniejszej ilości kodu w celu obsługi kontroli wartości null, szczególnie w przypadku malenia w strukturach danych. Jeśli lewy argument operacji lub odwołanie do obiektu ma wartość null, operacje zwracają wartość null.
Literały ciągu wielowierszowego
Literały ciągu mogą zawierać sekwencje nowego wiersza. Nie potrzebujesz już starego obejścia problemu przy użyciu polecenia <xml><![CDATA[...text with newlines...]]></xml>.Value.
Comments
Komentarze można umieszczać po niejawnych kontynuacjach wierszy, wewnątrz wyrażeń inicjatora i wśród terminów wyrażeń LINQ.
Inteligentniejsze w pełni kwalifikowane rozpoznawanie nazw
Podany kod, taki jak Threading.Thread.Sleep(1000), Visual Basic używał do wyszukiwania przestrzeni nazw "Threading", odkrywając, że było niejednoznaczne pomiędzy System.Threading i System.Windows.Threading, a następnie zgłaszał błąd. Program Visual Basic uwzględnia teraz obie możliwe przestrzenie nazw. Jeśli zostanie wyświetlona lista uzupełniania, edytor programu Visual Studio wyświetli listę elementów członkowskich z obu typów na liście uzupełniania.
Literały daty pierwszej roku
Literały daty można mieć w formacie rrrr-mm-dd, #2015-03-17 16:10 PM#.
Właściwości interfejsu odczytu
Właściwości interfejsu tylko do odczytu można zaimplementować przy użyciu właściwości odczyt i zapis. Interfejs gwarantuje minimalną funkcjonalność i nie zatrzymuje implementowania klasy, aby umożliwić ustawienie właściwości.
Aby uzyskać większą czytelność kodu, można teraz używać z TypeOfprogramem IsNot .
identyfikator< ostrzeżenia >#Disable i identyfikator ostrzeżenia <#Enable>
Możesz wyłączyć i włączyć określone ostrzeżenia dla regionów w pliku źródłowym.
Ulepszenia komentarza dokumentu XML
Podczas pisania komentarzy do dokumentu uzyskasz inteligentny edytor i utworzysz obsługę walidacji nazw parametrów, prawidłowej obsługi crefs (na przykład typów ogólnych i operatorów), kolorowania i refaktoryzacji.
Częściowe definicje modułu i interfejsu
Oprócz klas i struktur można zadeklarować częściowe moduły i interfejsy.
dyrektywy #Region wewnątrz treści metod
Można umieścić ograniczniki #Region...#End Region w dowolnym miejscu w pliku, wewnątrz funkcji, a nawet obejmujące wiele ciał funkcji.
Definicje przesłonięć są niejawnie przeciążenia
Jeśli dodasz Overrides modyfikator do definicji, kompilator niejawnie dodaje Overloads , aby w typowych przypadkach można było wpisać mniej kodu.
CObj dozwolone w argumentach atrybutów
Teraz możesz użyć CObj(...) w argumentach atrybutów. Wcześniej kompilator zwrócił błąd informujący, że nie jest wartością stałą.
Deklarowanie i używanie niejednoznacznych metod z różnych interfejsów
Wcześniej następujący kod zwrócił błędy, które uniemożliwiły deklarowanie IMock lub wywoływanie metod GetDetails (jeśli te metody zostały zadeklarowane w języku 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
Teraz kompilator używa normalnych reguł rozwiązywania przeciążenia, aby wybrać najbardziej odpowiednią GetDetails metodę do wywołania. Relacje interfejsu można zadeklarować w języku Visual Basic, tak jak pokazano w przykładzie.