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:
Erişilebilirlik. Çağıran kodun çağırmasını engelleyen erişim düzeyine sahip aşırı yüklemeyi ortadan kaldırır.
Parametre Sayısı. Çağrıda sağlanandan farklı sayıda parametre tanımlayan aşırı yüklemeyi ortadan kaldırır.
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.
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
Off
ise buOn
doğrudur.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.
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.
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 (Short
Integer
Single
ve 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 (Byte
Short
için, ancak Single
) genişleyen bir tanımlı parametre türüne Double
sahiptir. 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.
- İsteğe Bağlı Parametreler
- Parametre Dizileri
- Yordam Aşırı Yüklemesi
- Yordam Sorunlarını Giderme
- Nasıl yapılır: Bir Yordamın Birden Fazla Sürümünü Tanımlama
- Nasıl yapılır: Aşırı Yüklenmiş Bir Yordamı Çağırma
- Nasıl yapılır: İsteğe Bağlı Parametreler İsteyen Bir Yordamı Aşırı Yükleme
- Nasıl yapılır: Belirsiz Sayıda Parametre İsteyen Bir Yordamı Aşırı Yükleme
- Yordamları Aşırı Yüklemeye İlişkin Düşünceler
- Overloads
- Genişletme Yöntemleri