Visual Basic'te bir prosedüre veya işleve değişken sayıda argüman geçirmek için ParamArray parametresi kullanılabilir. Bu, belirli bir türden belirsiz sayıda parametreye sahip yöntemler oluşturmak için kullanışlı bir yöntemdir.
Sub ShowNumbers(ParamArray numbers() As Integer) For Each n As Integer In numbers Console.WriteLine(n) Next End Sub ' Çağrılar: ShowNumbers(1, 2, 3, 4) ShowNumbers() ' argüman olmadan çağırmak mümkün
ParamArray sadece bir tane ve listenin en sonunda olabilir.ParamArray türündeki argümanlar her zaman dizi olarak geçilir ve ByRef olamazlar.ParamArray, bir prosedürün aynı türden farklı sayıda parametre almasına izin verirken, aşırı yükleme farklı imzalarla birden çok yöntem oluşturur.
Aşırı yüklenme örneği:
Sub Add(a As Integer, b As Integer) ' ... End Sub Sub Add(a As Integer, b As Integer, c As Integer) ' ... End Sub
Ne zaman kullanmalıyız:
ParamArray: bir türden birçok parametre olduğunda.Soru: Bir prosedür hem ParamArray'ı hem de diğer parametreleri içerebilir mi, bunların sırası üzerine kısıtlamalar nelerdir?
Cevap: Evet, içerebilir, ancak ParamArray mutlaka son parametre olmalı ve fonksiyon imzasında sadece bir tane olmalıdır.
Yanlış kullanım örneği:
Sub Test(ParamArray x() As Integer, y As String) ' Derleme hatası End Sub
Doğru örnek:
Sub Test(y As String, ParamArray x() As Integer) ' Doğru End Sub
Hikaye
ParamArray ile farklı kaynaklardan veri toplamak için bir fonksiyon geliştirdik, ancak birçok durumda dizileri manuel olarak geçirdik. Geliştirici, dizi geçmenin iç içe diziye (dizi dizileri) yol açtığını fark etmedi, bu nedenle işleme her zaman yanlış yapıldı ve raporlama verileri zarar gördü.
Hikaye
SQL sorgularını evrensel olarak oluşturmak için ParamArray String argümanları kullanıldı, ancak yöntemi güncellerken ParamArray'ın ardından zorunlu bir parametre ekledik. Tüm sistem derlenmeyi durdurdu.
Hikaye
Farklı parametre setlerine sahip yöntemleri aşırı yükleme ve ParamArray kullanarak aşırı yükleme yaptık. Bu, belirsizlik çakışmalarına yol açtı: derleyici her zaman hangi yöntem seçeneğinin çağrılacağını belirleyemedi çünkü
ParamArraybirkaç aşırı yükleme için de geçerliydi.