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:

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

Adlandırılmış demet çıkarımı

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 capitaladlı üç öğeyle statestateNamebir 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

Demetler

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 ) Structuretanı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

NameOf

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.

Dize ilişkilendirme

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.

TypeOf <expr> IsNot <türü>

Kodunuzun daha fazla okunabilirliği için artık ile IsNotkullanabilirsinizTypeOf.

#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ı IMockGetDetails 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.

Ayrıca bkz.