Aracılığıyla paylaş


Visual Basic'e yönelik yenilikler

Bu makalede, Visual Basic'in her sürümü için önemli özellik adları listelenir. Dilin en son sürümlerindeki yeni ve gelişmiş özelliklerin ayrıntılı açıklamaları için bağlantılı bölümlere bakın.

Geçerli sürüm

Visual Basic 17.13 / Visual Studio 2026
Yeni özellikler için bkz. Visual Basic 17.13.

En son .NET SDK'sını .NET indirmeleri sayfasından indirebilirsiniz.

Önceki sürümler

Visual Basic 17.0 / Visual Studio 2022
Yeni özellikler için bkz. Visual Basic 17.0.

Visual Basic 16.9 / Visual Studio 2019 sürüm 16.9
Yeni özellikler için bkz. Visual Basic 16.9.

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 Derleyici Platformu'nun teknoloji önizlemeleri ("Roslyn")

Visual Basic / Visual Studio 2012
Async ve await anahtar sözcükler, yineleyiciler, arayan bilgisi öznitelikleri

Visual Basic, Visual Studio 2010
Otomatik olarak 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, if işleç, kısmi yöntemler, null atanabilir değer türleri

Visual Basic / Visual Studio 2005
Tür My ve yardımcı türleri (uygulamaya, bilgisayara, dosya sistemine, ağa erişim)

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 17.13

Visual Basic 17.13 genel kısıtlamayı unmanaged tanır. Visual Basic 17.13, System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute öğesini yöntem çözümleme için tanır.

Visual Basic 17.0

Visual Basic 17.0, 'yi System.Runtime.CompilerServices.CallerArgumentExpressionAttributeetkinleştirir.

Visual Basic 16.9

Visual Basic 16.9, yalnızca başlatma özellikleri kullanımını 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. Visual Basic'in .NET Core'a odaklanan ilk sürümüdür. .NET Core 3.0, Visual Basic Çalışma Zamanı'nın Windows Forms'a bağlı bölümlerini ekler.

Deyimler içinde daha fazla yerde açıklamalara izin verilir

Visual Basic 15.5 ve önceki sürümlerde, yalnızca boş satırlara, deyimin sonuna veya örtük satır devamlılığı izin verilen deyim içindeki belirli yerlere açıklama ekleyebilirsiniz. Visual Basic 16.0'dan başlayarak, açık satır devamlılıklarından sonra ve bir boşluk ve ardından bir alt çizgi ile başlayan bir satırdaki bir deyimin içine açıklama ekleyebilirsiniz.

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

Visual Basic'in önceki sürümlerinde , Double ve Single değerlerinin tamsayılara dönüştürülmesi görece düşük performans sunuyordu. Visual Basic 16.0, 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, CInt, CLng, CSByte, CUShort, CUInt ve 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 ve Option Strict değeri olarak ayarlandığında Off, kayan nokta dönüştürmelerinin performansını önemli ölçüde artırır:

Bu iyileştirme, kodun daha hızlı çalışmasını sağlar; tamsayı türlerine çok fazla 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 iyileştirmenin etkilediği 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 iyileştirme kayan nokta değerlerini yuvarlamak yerine keser.

Visual Basic 15.5

Sondaki 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ı hem konuma hem de ada göre bağımsız değişkenler eklediğinde, adlandırılmış bağımsız değişkenlerin önüne konumsal bağımsız değişkenler koymanız gerekiyordu. Visual Basic 15.5'den 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şkenleri istediğiniz sırada karıştırabilirsiniz. Bu esneklik özellikle adlandırılmış bağımsız değişkenler kodunuzun daha okunabilir olmasını sağlarken kullanışlıdır.

Örneğin, aşağıdaki yöntem çağrısı, adlandırılmış bağımsız değişken arasında iki konumsal bağımsız değişken içerir. 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 kombinasyonu, içeren sınıfın tüm üyelerinin ve içeren sınıftan türetilen türlerin erişebileceği bir üyeyi tanımlar, ancak yalnızca bunların içeren derlemede de bulunması şartıyla. Yapılar devralınamadığından, yalnızca bir sınıfın üyelerine uygulayabilirsiniz Private Protected .

Baştaki onaltılık/ikili/sekizli ayırıcı

Visual Basic 2017, alt çizgi karakteri (_) için basamak ayırıcısı desteği ekledi. Visual Basic 15.5'den başlayarak, ön ek ve onaltılık, 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 sayı olarak tanımlamak için öndeki basamak ayırıcısı kullanılır:

Dim number As Integer = &H_C305_F860

Alt çizgi karakterini öncü 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ış tanımlama grubu çı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ı çıkartır. Bir tuple öğesini açıkça adlandırmanız gerekmez. Aşağıdaki örnek, iki adlandırılmış öğeyle bir ikili oluşturmak için çıkarımla kullanır: state ve 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

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. Başvuru derlemesinin çıkış dizinini tanımlamak için -refout kullanın. Derlemenin yalnızca bir başvuru derlemesi çıkardığını belirtmek için -refonly kullanın.

Visual Basic 15

Dizilerini

Tuple'lar, genellikle tek bir metot çağrısından birden fazla değer döndürmek için kullandığınız hafif bir veri yapısıdır. Normalde, bir yöntemden birden çok değer döndürmek için aşağıdaki seçeneklerden birini yapmanız gerekir:

  • Özel bir tür (a Class veya a Structure) tanımlayın. Bu seçenek ağır 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'in tanımlama grupları desteği, hızlı bir şekilde bir tanımlama grubu tanımlamanıza, isteğe bağlı olarak değerlerine anlamsal adlar atamanıza ve değerlerini hızlı bir şekilde 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 metodu çağırabilir ve döndürülen demeti, aşağıdaki örnekte olduğu gibi 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 değişmez 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 değer atamaları" bölümüne bakın.

C# başvuru dönüş değerleri desteği

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 olanak sağlar.

Örneğin, C# dilinde yazılan aşağıdaki Sentence sınıf, belirtilen alt FindNext dizeyle başlayan bir tümcede 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 tarafından geçirilen bir Boolean değişken, aramanın başarılı olup olmadığını gösterir. Bu, döndürülen değerin okunmasının yanı sıra çağıranın da bunu değiştirebileceği ve bu değişikliğin sınıfına Sentence yansıtılmış olduğu anlamına gelir.

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 haliyle, aşağıdaki örneğe benzer bir kod kullanarak cümlede bulunan sözcüğü değiştirebilirsiniz. Yöntemine bir değer atamadığınızı, bunun yerine yöntemin döndürdüğü ifadeyi (başvuru dönüş değeri) atadığınızı unutmayın.

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üğü kendisiyle değiştirerek bu sorunu 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öntemi 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 hata iletisinde kullanmak üzere bir türün veya üyenin nitelenmemiş dize adını alabilirsiniz. Bu yaklaşım, yeniden düzenleme sırasında kodunuzu doğru tutar. Bu özellik model-view-controller MVC bağlantılarını bağlamak ve özellik değiştirilmiş olayları tetikleme için de kullanışlıdır.

Dize ilişkilendirme

Dizeleri oluşturmak için dize ilişkilendirme ifadelerini kullanın. İlişkili dize ifadesi, ifadeler içeren bir şablon dizesine benzer. İlişkili 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 hafif bir şekilde test edebilirsiniz. Bu işleçler, özellikle veri yapılarına inmek için 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 <xml><![CDATA[...text with newlines...]]></xml>.Value kullanmak için eski geçici çözümü kullanmanıza gerek yok.

Açıklamalar

Açıklamaları örtük satır devamlılıklarından sonra, başlatıcı ifadelerinin içine ve LINQ ifade terimleri arasına yerleştirebilirsiniz.

Daha akıllı tam ad çözümlemesi

Verilen Threading.Thread.Sleep(1000) kodunda, Visual Basic "Threading" ad alanını aramak için kullanılırdı, System.Threading ile System.Windows.Threading arasında belirsizlik olduğunu keşfeder ve bir hata bildirirdi. Visual Basic artık her iki olası ad alanını da birlikte dikkate 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

yy-mm-dd 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 TypeOfkullanabilirsinizIsNot.

#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ın doğrulanması, crefs gibi kodların düzgün işlenmesi (örneğin, genel tipler ve işleçler), renklendirme ve yeniden düzenleme için akıllı düzenleyici ve derleme desteğine sahip olursunuz.

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çinde #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üklemedir

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

Artık CObj(...)'yi öznitelik bağımsız değişkenlerinde kullanabilirsiniz. Daha önce derleyici, sabit olmadığını belirten bir hata döndürdü.

Farklı arabirimlerden belirsiz yöntemleri bildirme ve kullanma

Daha önce, aşağıdaki kod bildirmenizi IMock veya çağırmanızı GetDetails engelleyen hatalar döndürdü (bu yöntemler C# dilinde bildirildiyse):

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 yöntemi seçmek için normal aşırı yükleme çözümleme kurallarını kullanır. Visual Basic'te, örnekte gösterilenler gibi arabirim ilişkileri bildirebilirsiniz.

Ayrıca bakınız