Visual Basic için yenilikler
Bu konu başlığı altında, Visual Basic her sürümü için temel özellik adları ve dilin en son sürümlerindeki yeni ve gelişmiş özelliklerin ayrıntılı açıklamaları listelenir.
Geçerli sürüm
Visual Basic 16.9 / Visual Studio 2019 sürüm 16.9
Yeni özellikler için bkz. Visual Basic 16.9.
En son .NET SDK'sını .NET indirmeleri sayfasından indirebilirsiniz.
Önceki sürümler
Visual Basic 16.0 / Visual Studio 2019 sürüm 16.0
Yeni özellikler için bkz. Visual Basic 16.0.
Visual Basic 15.5 / Visual Studio 2017 sürüm 15.5
Yeni özellikler için bkz. Visual Basic 15.5.
Visual Basic 15.3 / Visual Studio 2017 sürüm 15.3
Yeni özellikler için bkz. Visual Basic 15.3.
Visual Basic 15 / Visual Studio 2017
Yeni özellikler için bkz. Visual Basic 2017.
Visual Basic / Visual Studio 2015
Yeni özellikler için bkz. Visual Basic 14.
Visual Basic / Visual Studio 2013
.NET Compiler Platform teknoloji önizlemeleri ("Roslyn")
Visual Basic / Visual Studio 2012
Async
ve await
anahtar sözcükler, yineleyiciler, çağıran bilgisi öznitelikleri
Visual Basic, Visual Studio 2010
Otomatik uygulanan özellikler, koleksiyon başlatıcıları, örtük satır devamlılığı, dinamik, genel co/contra varyansı, genel ad alanı erişimi
Visual Basic / Visual Studio 2008
Dil Tümleşik Sorgusu (LINQ), XML değişmez değerleri, yerel tür çıkarımı, nesne başlatıcılar, anonim türler, uzantı yöntemleri, yerel var
tür çıkarımı, lambda ifadeleri, işleç, if
kısmi yöntemler, null atanabilir değer türleri
Visual Basic / Visual Studio 2005
Tür My
ve yardımcı türleri (uygulama, bilgisayar, dosya sistemi, ağ erişimi)
Visual Basic / Visual Studio .NET 2003
Bit kaydırma işleçleri, döngü değişkeni bildirimi
Visual Basic / Visual Studio .NET 2002
Visual Basic .NET'in ilk sürümü
Visual Basic 16.9
Visual Basic 16.9, yalnızca başlatma özelliklerinin tüketimini sağlar.
Visual Basic 16.0
Visual Basic 16.0, .NET Core'a Visual Basic Çalışma Zamanı 'nın (microsoft.visualbasic.dll) daha fazla özelliğinin teminine odaklanır ve .NET Core'a odaklanan ilk Visual Basic sürümüdür. Visual Basic Çalışma Zamanı'nın birçok bölümü WinForms'a bağlıdır ve bunlar daha sonraki bir Visual Basic sürümüne eklenecektir.
Deyimlerin içinde daha fazla yerde açıklamalara izin verilir
Visual Basic 15.8 ve önceki sürümlerde açıklamalara yalnızca boş satırlarda, deyimin sonunda veya örtük satır devamlılığı izin verilen deyim içindeki belirli yerlerde izin verilir. Visual Basic 16.0'dan başlayarak, açık satır devamlarından sonra ve boşlukla başlayan bir satırdaki bir deyimin içinde ve ardından alt çizgiyle açıklamalara da izin verilir.
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
Kayan noktadan tamsayıya dönüştürme iyileştirildi
önceki Visual Basic sürümlerinde, Double ve Single değerlerinin tamsayılara dönüştürülmesi görece düşük performans sunuyordu. Visual Basic 15.8, aşağıdaki yöntemlerden herhangi biri tarafından döndürülen değeri iç Visual Basic tamsayı dönüştürme işlevlerinden birine (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt, CULng) geçirdiğinizde veya aşağıdaki yöntemlerden herhangi biri tarafından döndürülen değer örtük olarak tamsayı türüne geçirildiğinde kayan nokta dönüştürmelerinin performansını önemli ölçüde artırır. Option Strict olarak ayarlanırOff
:
- 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)
Bu iyileştirme, kodun daha hızlı çalışmasını sağlar; tamsayı türlerine çok sayıda dönüştürme işlemi yürüten kod için iki kat daha hızlıdır. Aşağıdaki örnekte, bu iyileştirmeden etkilenen bazı basit yöntem çağrıları gösterilmektedir:
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
Bu değerin kayan nokta değerlerini yuvarlamaz kesildiğini unutmayın.
Visual Basic 15.5
Girintili olmayan adlandırılmış bağımsız değişkenler
Visual Basic 15.3 ve önceki sürümlerde, bir yöntem çağrısında hem konuma hem de ada göre bağımsız değişkenler eklendiğinde, konumsal bağımsız değişkenlerin adlandırılmış bağımsız değişkenlerin önüne alınması gerekiyordu. 15.5 Visual Basic başlayarak, son konumsal bağımsız değişkene kadar olan tüm bağımsız değişkenler doğru konumda olduğu sürece konumsal ve adlandırılmış bağımsız değişkenler herhangi bir sırada görünebilir. Bu, özellikle kodu daha okunabilir hale getirmek için adlandırılmış bağımsız değişkenler kullanıldığında kullanışlıdır.
Örneğin, aşağıdaki yöntem çağrısının adlandırılmış bağımsız değişken arasında iki konumsal bağımsız değişkeni vardır. Adlandırılmış bağımsız değişken, 19 değerinin bir yaşı temsil ettiğini açıkça gösterir.
StudentInfo.Display("Mary", age:=19, #9/21/1998#)
Private Protected
üye erişimi değiştiricisi
Bu yeni anahtar sözcük bileşimi, hem kendi içeren sınıfındaki tüm üyeler hem de içeren sınıftan türetilen türler tarafından erişilebilen bir üyeyi tanımlar, ancak yalnızca bunları içeren derlemede de bulunurlar. Yapılar devralınamadığından, Private Protected
yalnızca bir sınıfın üyelerine uygulanabilir.
Baştaki onaltılık/ikili/sekizli ayırıcı
Visual Basic 2017, alt çizgi karakteri (_
) için basamak ayırıcı olarak destek ekledi. 15.5 Visual Basic başlayarak, ön ek ile onaltılı, ikili veya sekizli basamaklar arasında öncü ayırıcı olarak alt çizgi karakterini kullanabilirsiniz. Aşağıdaki örnekte, 3.271.948.384 sayısını onaltılık bir sayı olarak tanımlamak için bir baştaki basamak ayırıcısı kullanılır:
Dim number As Integer = &H_C305_F860
Alt çizgi karakterini baştaki ayırıcı olarak kullanmak için, Visual Basic proje (*.vbproj) dosyanıza aşağıdaki öğeyi eklemeniz gerekir:
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
Visual Basic 15.3
Değişkenlerden tanımlama grubu öğelerinin değerini atadığınızda, Visual Basic ilgili değişken adlarından tanımlama grubu öğelerinin adını çıkarsar; bir tanımlama grubu öğesini açıkça adlandırmanız gerekmez. Aşağıdaki örnekte, , ve capital
adlı üç öğeyle state
stateName
bir tanımlama grubu oluşturmak için çıkarım kullanılır.
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
Ek derleyici anahtarları
Visual Basic komut satırı derleyicisi artık başvuru derlemelerinin çıkışını denetlemek için -refout ve -refonly derleyici seçeneklerini destekliyor. -refout , başvuru derlemesinin çıkış dizinini tanımlar ve -refonly yalnızca bir başvuru derlemesinin derleme tarafından çıkış olacağını belirtir.
Visual Basic 15
Tanımlama kümeleri, tek bir yöntem çağrısından birden çok değer döndürmek için en yaygın olarak kullanılan basit bir veri yapısıdır. Normalde, bir yöntemden birden çok değer döndürmek için aşağıdakilerden birini yapmanız gerekir:
Özel bir tür (a
Class
veya )Structure
tanımlayın. Bu ağır sıklet bir çözümdür.yönteminden bir değer döndürmeye ek olarak bir veya daha fazla
ByRef
parametre tanımlayın.
Visual Basic desteği, hızla bir tanımlama grubu tanımlamanıza, isteğe bağlı olarak değerlerine anlamsal adlar atamanıza ve değerlerini hızla almanıza olanak tanır. Aşağıdaki örnek yöntemine bir çağrı sarmalar TryParse ve bir tanımlama grubu döndürür.
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
Ardından yöntemini çağırabilir ve döndürülen tanımlama grubu aşağıdaki gibi bir kodla işleyebilirsiniz.
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
İkili değişmez değerler ve basamak ayırıcıları
veya &b
ön ekini &B
kullanarak ikili sabit değer tanımlayabilirsiniz. Ayrıca, okunabilirliği artırmak için basamak ayırıcısı olarak alt çizgi karakterini _
kullanabilirsiniz. Aşağıdaki örnek, bir Byte
değer atamak ve bunu ondalık, onaltılık ve ikili sayı olarak görüntülemek için her iki özelliği de kullanır.
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)
Daha fazla bilgi için Bayt, Tamsayı, Uzun, Kısa, SByte, UInteger, ULong ve UShort veri türlerinin "Değişmez atamalar" bölümüne bakın.
C# başvuru dönüş değerleri desteği
C# 7.0'dan başlayarak C# başvuru dönüş değerlerini destekler. Diğer bir ifadeyle, çağıran yöntem başvuru tarafından döndürülen bir değer aldığında, başvurunun değerini değiştirebilir. Visual Basic, başvuru dönüş değerlerine sahip yöntemler yazmanıza izin vermez, ancak başvuru dönüş değerlerini kullanmanıza ve değiştirmenize izin verir.
Örneğin, C# dilinde yazılan aşağıdaki Sentence
sınıf, belirtilen alt FindNext
dizeyle başlayan bir cümlede bir sonraki sözcüğü bulan bir yöntem içerir. Dize bir başvuru dönüş değeri olarak döndürülür ve yöntemine başvuru ile geçirilen bir Boolean
değişken, aramanın başarılı olup olmadığını gösterir. Bu, döndürülen değeri okumaya ek olarak çağıranın da değeri değiştirebileceği ve bu değişikliğin sınıfına Sentence
yansıtıldığını gösterir.
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();
}
}
En basit biçimiyle, aşağıdaki gibi bir kod kullanarak cümlede bulunan sözcüğü değiştirebilirsiniz. Yöntemine bir değer atamadığınıza, yöntemin döndürdüğü ifadeye (başvuru dönüş değeri) atadığınıza dikkat edin.
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.
Ancak bu kodla ilgili bir sorun, eşleşme bulunamazsa yöntemin ilk sözcüğü döndürmesidir. Örnek, bir eşleşme bulunup bulunmadığını belirlemek için bağımsız değişkenin Boolean
değerini incelemediğinden, eşleşme yoksa ilk sözcüğü değiştirir. Aşağıdaki örnek, eşleşme yoksa ilk sözcüğü kendisi ile değiştirerek bunu düzeltir.
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.
Daha iyi bir çözüm, başvuru dönüş değerinin başvuru tarafından geçirildiği yardımcı bir yöntem kullanmaktır. Yardımcı yöntem daha sonra başvuruyla ona geçirilen bağımsız değişkeni değiştirebilir. Aşağıdaki örnek bunu yapar.
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.
Daha fazla bilgi için bkz . Başvuru Dönüş Değerleri.
Visual Basic 14
Bir dizeyi sabit kodlamadan bir hata iletisinde kullanmak üzere bir türün veya üyenin nitelenmemiş dize adını alabilirsiniz. Bu, yeniden düzenleme sırasında kodunuzun doğru kalmasını sağlar. Bu özellik, model-view-controller MVC bağlantılarını bağlamak ve özellik değiştirilmiş olayları tetikleme için de yararlıdır.
Dizeleri oluşturmak için dize ilişkilendirme ifadelerini kullanabilirsiniz. İlişkilendirilmiş dize ifadesi, ifadeler içeren bir şablon dizesine benzer. İlişkilendirilmiş bir dizeyi bağımsız değişkenlere göre anlamak Bileşik Biçimlendirme'den daha kolaydır.
Null koşullu üye erişimi ve dizin oluşturma
Üye erişimi () veya dizin (?.
?[]
) işlemi gerçekleştirmeden önce null değerini çok basit bir şekilde test edebilirsiniz. Bu işleçler, özellikle veri yapılarına azalan düzende null denetimleri işlemek için daha az kod yazmanıza yardımcı olur. Sol işlenen veya nesne başvurusu null ise, işlemler null döndürür.
Çok satırlı dize değişmez değerleri
Dize değişmez değerleri yeni satır dizileri içerebilir. Artık kullanmayla ilgili eski bir çözüme ihtiyacınız yok <xml><![CDATA[...text with newlines...]]></xml>.Value
Açıklamalar
Örtük satır devamlılıklarından sonra, başlatıcı ifadelerinin içine ve LINQ ifade terimlerine açıklama ekleyebilirsiniz.
Daha akıllı tam ad çözümlemesi
gibi Threading.Thread.Sleep(1000)
bir kod Visual Basic "İş Parçacığı Oluşturma" ad alanını aramak için kullanıldığında, System.Threading ile System.Windows arasında belirsiz olduğunu fark edin. İş parçacığı oluşturup bir hata bildirin. Visual Basic artık her iki olası ad alanını da birlikte ele alır. Tamamlanma listesini gösterirseniz, Visual Studio düzenleyicisi tamamlama listesindeki her iki türden üyeleri listeler.
Yılın ilk tarihi değişmez değerleri
y-aa-gg biçiminde tarih değişmez değerlerine sahip olabilirsiniz. #2015-03-17 16:10 PM#
Salt okunur arabirim özellikleri
Readwrite özelliğini kullanarak salt okunur arabirim özellikleri uygulayabilirsiniz. Arabirim en düşük işlevselliği garanti eder ve bir uygulama sınıfının özelliğin ayarlanmasına izin vermesini durdurmaz.
Kodunuzun daha fazla okunabilirliği için artık ile IsNot
kullanabilirsinizTypeOf
.
#Disable Uyarı <Kimliği> ve #Enable Uyarı <Kimliği>
Kaynak dosya içindeki bölgeler için belirli uyarıları devre dışı bırakabilir ve etkinleştirebilirsiniz.
XML belge açıklaması geliştirmeleri
Belge açıklamaları yazarken, parametre adlarını doğrulama, düzgün işleme crefs
(geneller, işleçler, vb.), renklendirme ve yeniden düzenleme için akıllı düzenleyici ve derleme desteği alırsınız.
Kısmi modül ve arabirim tanımları
Sınıflara ve yapılara ek olarak, kısmi modülleri ve arabirimleri bildirebilirsiniz.
Yöntem gövdeleri içindeki #Region yönergeleri
#Region...#End Bölge sınırlayıcılarını bir dosyanın herhangi bir yerine, işlevlerin içine ve hatta işlev gövdelerine yayılabilir.
Geçersiz kılma tanımları örtük olarak aşırı yüklemelerdir
Değiştiriciyi Overrides
bir tanıma eklerseniz, derleyici örtük olarak ekler Overloads
, böylece yaygın durumlarda daha az kod yazabilirsiniz.
Öznitelik bağımsız değişkenlerinde CObj'ye izin verilir
CObj(...) öğesinin öznitelik yapılarında kullanıldığında sabit olmadığı hatasını vermek için kullanılan derleyici.
Farklı arabirimlerden belirsiz yöntemleri bildirme ve kullanma
Daha önce aşağıdaki kod bildirmenizi veya çağırmanızı IMock
GetDetails
engelleyen hatalar döndürmüştü (bunlar C# dilinde bildirilmişse):
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
Şimdi derleyici çağrılacak en uygun GetDetails
olanı seçmek için normal aşırı yükleme çözümleme kurallarını kullanır ve örnekte gösterilenler gibi arabirim ilişkilerini Visual Basic bildirebilirsiniz.