Yordamları Aşırı Yüklemeye İlişkin Düşünceler (Visual Basic)

Bir yordamı aşırı yüklerken, aşırı yüklenmiş her sürüm için farklı bir imza kullanmanız gerekir. Bu genellikle her sürümün farklı bir parametre listesi belirtmesi gerektiği anlamına gelir. Daha fazla bilgi için Yordam Aşırı Yükleme'deki "Farklı İmza" bölümüne bakın.

Farklı imzalara sahip olmaları koşuluyla bir yordamı bir Sub yordamla aşırı yükleyebilirsiniz Function ve tam tersi de geçerlidir. İki aşırı yükleme yalnızca birinin dönüş değerine sahip olduğu, diğeri farklı olamaz.

Bir özelliği, yordamı aşırı yüklerken kullandığınız gibi ve aynı kısıtlamalarla aşırı yükleyebilirsiniz. Ancak, bir yordamı bir özellik ile aşırı yükleyemezsiniz veya tam tersi.

Aşırı Yüklenmiş Sürümlerin Alternatifleri

Özellikle bağımsız değişkenlerin varlığı isteğe bağlı olduğunda veya sayıları değişken olduğunda, bazen aşırı yüklenmiş sürümlere alternatifleriniz olabilir.

İsteğe bağlı bağımsız değişkenlerin tüm diller tarafından desteklenmediğini ve parametre dizilerinin Visual Basic ile sınırlı olduğunu unutmayın. Birkaç farklı dilde yazılmış koddan çağrılma olasılığı olan bir yordam yazıyorsanız, aşırı yüklenmiş sürümler en yüksek esnekliği sunar.

Aşırı Yüklemeler ve İsteğe Bağlı Bağımsız Değişkenler

Çağıran kod isteğe bağlı olarak bir veya daha fazla bağımsız değişken sağlayabilir veya atlayabilirse, birden çok aşırı yüklenmiş sürüm tanımlayabilir veya isteğe bağlı parametreler kullanabilirsiniz.

Aşırı Yüklenmiş Sürümler Ne Zaman Kullanılır?

Aşağıdaki durumlarda bir dizi aşırı yüklenmiş sürüm tanımlamayı düşünebilirsiniz:

  • Yordam kodundaki mantık, çağıran kodun isteğe bağlı bir bağımsız değişken verip vermediğine bağlı olarak önemli ölçüde farklıdır.

  • Yordam kodu, çağıran kodun isteğe bağlı bir bağımsız değişken sağlayıp sağlamadığını güvenilir bir şekilde test edemez. Örneğin, çağıran kodun sağlaması beklenemeyen varsayılan bir değer için olası bir aday yoksa bu durum söz konusudur.

İsteğe Bağlı Parametreler Ne Zaman Kullanılır?

Aşağıdaki durumlarda bir veya daha fazla isteğe bağlı parametreyi tercih edebilirsiniz:

  • Çağıran kod isteğe bağlı bir bağımsız değişken sağlamadığında gereken tek eylem, parametreyi varsayılan bir değere ayarlamaktır. Böyle bir durumda, bir veya daha fazla Optional parametreye sahip tek bir sürüm tanımlarsanız yordam kodu daha az karmaşık olabilir.

Daha fazla bilgi için bkz . İsteğe Bağlı Parametreler.

Aşırı Yüklemeler ve ParamArrays

Çağıran kod değişken sayıda bağımsız değişken geçirebildiğinde, birden çok aşırı yüklenmiş sürüm tanımlayabilir veya bir parametre dizisi kullanabilirsiniz.

Aşırı Yüklenmiş Sürümler Ne Zaman Kullanılır?

Aşağıdaki durumlarda bir dizi aşırı yüklenmiş sürüm tanımlamayı düşünebilirsiniz:

  • Çağıran kodun parametre dizisine hiçbir zaman az sayıdan fazla değer geçirmediğini biliyorsunuz.

  • Yordam kodundaki mantık, çağıran kodun kaç değer geçtiğine bağlı olarak önemli ölçüde farklıdır.

  • Çağıran kod farklı veri türlerinin değerlerini geçirebilir.

Parametre Dizisi Ne Zaman Kullanılır?

Aşağıdaki durumlarda bir ParamArray parametre tarafından daha iyi sunulur:

  • Çağıran kodun parametre dizisine kaç değer geçirebileceğini tahmin edemeyebilirsiniz ve çok büyük bir sayı olabilir.

  • Yordam mantığı, çağıran kodun geçtiği tüm değerleri yinelemeye ve temelde her değer üzerinde aynı işlemleri gerçekleştirmeye yardımcı olur.

Daha fazla bilgi için bkz . Parametre Dizileri.

İsteğe Bağlı Parametreler için Örtük Aşırı Yüklemeler

İsteğe bağlı parametresi olan bir yordam, biri isteğe bağlı parametreli, diğeri de parametresiz olmak üzere iki aşırı yüklenmiş yordama eşdeğerdir. Böyle bir yordamı, bunlardan herhangi biri için karşılık gelen bir parametre listesiyle aşırı yükleyemezsiniz. Aşağıdaki bildirimler bunu gösterir.

Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)

Birden fazla isteğe bağlı parametreye sahip bir yordam için, yukarıdaki örnektekine benzer bir mantıkla gelen örtük aşırı yüklemeler kümesi vardır.

ParamArray Parametresi için Örtük Aşırı Yüklemeler

Derleyici, çağıran kodun parametre dizisine geçişinde birbirinden farklı sonsuz sayıda aşırı yüklemeye sahip olmak için ParamArray parametresine sahip bir yordamı aşağıdaki gibi değerlendirir:

  • Çağıran kod için bir bağımsız değişken sağlamadığında için bir aşırı yükleme ParamArray

  • Çağıran kod öğe türünün tek boyutlu bir dizisini sağladığında için ParamArray bir aşırı yükleme

  • Her pozitif tamsayı için, çağıran kod bu sayıda bağımsız değişken sağladığında öğe türünün her biri ParamArray için bir aşırı yükleme

Aşağıdaki bildirimler bu örtük aşırı yüklemeleri gösterir.

Overloads Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

Böyle bir yordamı, parametre dizisi için tek boyutlu bir dizi alan bir parametre listesiyle aşırı yükleyemezsiniz. Ancak, diğer örtük aşırı yüklemelerin imzalarını kullanabilirsiniz. Aşağıdaki bildirimler bunu gösterir.

' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

Aşırı Yüklemeye Alternatif Olarak Türsüz Programlama

Çağıran kodun bir parametreye farklı veri türleri geçirmesine izin vermek istiyorsanız, alternatif bir yaklaşım türüz programlamadır. Seçenek Katı Deyimi veya -optionstrict derleyici seçeneğiyle tür denetimi anahtarını Off olarak ayarlayabilirsiniz. Ardından parametrenin veri türünü bildirmeniz gerekmez. Ancak bu yaklaşımın aşırı yüklemeyle karşılaştırıldığında aşağıdaki dezavantajları vardır:

  • Türüz programlama daha az verimli yürütme kodu üretir.

  • Yordamın geçirildiğini tahmin eden her veri türü için test etmesi gerekir.

  • Çağıran kod yordamın desteklemediği bir veri türü geçirirse derleyici hata sinyali veremez.

Ayrıca bkz.