Aşırı Yükleme Çözümü (Visual Basic Başvurusu)

Visual Basic derleyicisi birkaç aşırı yüklenmiş sürümde tanımlanan bir yordam çağrısıyla karşılaştığında, derleyicinin çağrılacak aşırı yüklemelerden hangisine karar vermesi gerekir. Bunu yapmak için aşağıdaki adımları gerçekleştirir:

  1. Erişilebilirlik. Çağıran kodun çağırmasını engelleyen erişim düzeyine sahip aşırı yüklemeyi ortadan kaldırır.

  2. Parametre Sayısı. Çağrıda sağlanandan farklı sayıda parametre tanımlayan aşırı yüklemeyi ortadan kaldırır.

  3. Parametre Veri Türleri. Derleyici, örnek yöntemlerine uzantı yöntemlerine göre tercih verir. Yordam çağrısıyla eşleşmesi için yalnızca genişletme dönüştürmeleri gerektiren bir örnek yöntemi bulunursa, tüm uzantı yöntemleri bırakılır ve derleyici yalnızca örnek yöntemi adaylarıyla devam eder. Böyle bir örnek yöntemi bulunmazsa, hem örnek hem de uzantı yöntemleriyle devam eder.

    Bu adımda, çağıran bağımsız değişkenlerin veri türlerinin aşırı yüklemede tanımlanan parametre türlerine dönüştürülemediği herhangi bir aşırı yüklemeyi ortadan kaldırır.

  4. Dönüştürmeleri Daraltma. Çağıran bağımsız değişken türlerinden tanımlı parametre türlerine daraltma dönüştürmesi gerektiren aşırı yüklemeyi ortadan kaldırır. Tür denetimi anahtarı (Seçenek Katı Deyimi) veya Offise bu On doğrudur.

  5. En Az Genişletme. Derleyici, kalan aşırı yüklemeleri çiftler halinde dikkate alır. Her çift için tanımlanan parametrelerin veri türlerini karşılaştırır. Birindeki türlerin tümü diğerindeki karşılık gelen türlere genişletirse, derleyici ikincisini ortadan kaldırır. Yani, en az miktarda genişletme gerektiren aşırı yüklemeyi korur.

  6. Tek Aday. Yalnızca bir aşırı yükleme kalana kadar çiftler halinde aşırı yüklemeleri göz önünde bulundurmaya devam eder ve bu aşırı yüklemeye yönelik çağrıyı çözümler. Derleyici aşırı yüklemeleri tek bir adayla azaltamazsa bir hata oluşturur.

Aşağıdaki çizimde, aşırı yüklenmiş bir sürüm kümesinden hangilerinin çağrıldığını belirleyen işlem gösterilmektedir.

Flow diagram of overload resolution process

Aşağıdaki örnekte bu aşırı yükleme çözümleme işlemi gösterilmektedir.

Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub
Dim r, s As Short
Call z(r, s)
Dim p As Byte, q As Short
' The following statement causes an overload resolution error.
Call z(p, q)

İlk çağrıda, ilk bağımsız değişkenin türü karşılık gelen parametreninByte (Short) türüne daralttığı için derleyici ilk aşırı yüklemeyi ortadan kaldırır. Ardından, ikinci aşırı yüklemedeki ( ve ) her bağımsız değişken türü üçüncü aşırı yüklemede (ShortIntegerSingleve Single) ilgili türe genişletildiği için üçüncü aşırı yüklemeyi ortadan kaldırır. İkinci aşırı yükleme daha az genişletme gerektirir, bu nedenle derleyici bunu çağrı için kullanır.

İkinci çağrıda derleyici, daraltma temelinde aşırı yüklemelerin hiçbirini ortadan kaldıramaz. Bağımsız değişken türlerinin daha az genişletilmesiyle ikinci aşırı yüklemeyi çağırabildiğinden üçüncü aşırı yüklemeyi ilk çağrıdakiyle aynı nedenle ortadan kaldırır. Ancak, derleyici birinci ve ikinci aşırı yüklemeler arasında çözümlenemez. Her biri, diğerinde karşılık gelen türe (ByteShortiçin, ancak Single ) genişleyen bir tanımlı parametre türüne Doublesahiptir. Bu nedenle derleyici bir aşırı yükleme çözümleme hatası oluşturur.

Aşırı Yüklenmiş İsteğe Bağlı ve ParamArray Bağımsız Değişkenleri

Bir yordamın iki aşırı yüklemesi aynı imzalara sahipse, son parametrenin birinde İsteğe bağlı, diğerinde ParamArray olarak bildirilirse, derleyici bu yordama yönelik çağrıyı aşağıdaki gibi çözümler:

Çağrı son bağımsız değişkeni şu şekilde sağlar: Derleyici, son bağımsız değişkeni olarak bildiren aşırı yüklemeye yönelik çağrıyı çözümler
Değer yok (bağımsız değişken atlanmış) Optional
Tek bir değer Optional
Virgülle ayrılmış bir listede iki veya daha fazla değer ParamArray
Herhangi bir uzunlukta bir dizi (boş bir dizi dahil) ParamArray

Ayrıca bkz.