Bir yöntem diğerini aşırı yüklüyor mu, yoksa her iki yöntem de aşırı yük mü?


13

Bu yöntemi oluşturursam

public void foo()

Ve sonra böyle aşırı yüklenmiş bir versiyon oluşturuyorum

public void foo( string bar )

İkinci fonksiyonların birinciyi aşırı yüklediğini veya her iki yöntemin de eşit derecede "aşırı yüklendiğini" mi söylüyoruz?

Bu (sanırım), başka bir işlevle (biraz kalıtım gibi, ama gerçekten değil) aşırı yüklenen bir taban tipi işlev olduğunu ima eder.

Bir yöntemin "bir başkasını aşırı yükleyebileceğini" varsayarsak, bu bir kelime ise "aşırı yükleyici" ve "aşırı yük" gibi terimleri de ifade eder. Ancak, özellikle birkaç aşırı yükünüz olabileceğinden, bu hiç de doğru hissetmiyor.

Aşırı yüklenmiş bir yöntem yaratma sürecini yazmak istediğimde bu soruyu aldım ve bunu yazmanın en doğru yolunu istedim.

Örnekler:

  • Aşırı yüklüyorum foo
  • Ben aşırı am fooilefoo( string bar )
  • Aşırı yüklenmiş bir yöntem oluşturuyorum
  • Aşırı yükleme yapıyorum

Yani evet, bu tür beni düşündürdü, ne yapacağımdan emin değilim. Çevrimiçi aşırı yükleme işlevinin binlerce olmasa da yüzlerce açıklaması var, ancak ilk bakışta bunu ele alan herhangi bir şey bulamadım.


Bunun için aşırı yük kelimesinin neden kullanıldığını bilmek istiyorum. Hiç mantıklı gelmiyor. Ne yükleniyor? Tekrar nasıl veya aşırı yüklenir?
Martin Maat

@MartinMaat Titon'un kabul ettiği cevabı okudunuz ve türünün yorumunu okudunuz mu? Yüklenenleri (aşırı) açıklamak için iyi bir iş çıkarmış gibi görünüyorlar.
8bittree

Bunları okudum, kavramı açıklıyorlar, ethomolojiyi değil.
Martin Maat

Yanıtlar:


29

Aşırı yüklenmelerden bahsederken , işlevin adı aşırı yüklenir, işlevin kendisi değil. Adı aşırı yükleyen işlevler "aşırı yükler" ve adı aşırı yükler, ancak birbirini değil. Örnekte, "public void foo()"ve "public void foo( string bar )"her ikisi de adı "foo" aşırı. Bu nedenle, işlevlerden birinin aşırı yüklenmesi ve aşırı yüklenmesi açısından konuşamazsınız, çünkü doğrudan bir ilişkileri yoktur.

Örneklerinizde, "foo" yı (ad) "foo (string bar)" (işlev) ile aşırı yüklediğinizi söyleyebilirsiniz, ancak aşırı yüklenmiş bir yöntem oluşturduğunuzu söyleyemezsiniz, çünkü yöntemler hiçbir zaman aşırı yüklenmez. Bir aşırı yükleme yöntemi oluşturduğunuzu söyleyebilirsiniz. "Aşırı foo yapmak" formüle etmek "aşırı foo" demenin daha kötü bir yoludur.


Ancak, başka bir işlev aynı işlevde olmasa bile, her işlev adını aşırı yüklemez mi?
leftaroundabout

Buna yukarıdaki genel sorunun cevabı olarak katılıyorum. Ama biri diğerinden işlevlerden birini çağırırsa, birinin diğerini aşırı yüklediği hissini algılarım.
Joshua Drake

3
@leftaroundabout: "Aşırı yükleme" normalden daha fazla "yükleme" yaptığınızı gösterir, bu nedenle terim yalnızca aynı ada sahip birden fazla işleve sahip olduğunuzda kullanılır.
kindall

@Kindall ile anlaştı; bir yazılım geliştirme bağlamında "aşırı yük" kelimesi "birden fazla anlam atamak" anlamına gelir; DB'de sütunların aşırı yüklenmesi (anlamı diğer alanlara bağlıdır), parametrelerin aşırı yüklenmesi (anlamı diğer parametrelere bağlıdır), vb. Bir yöntem diğerini aşırı yüklemez, ancak bir ada sahip birden fazla yöntem varsa , ad " " aşırı yüklendi.
KutuluMike

15

Ben sadece fooaşırı yüklenmiş olduğunu söyleyebilirim . Burada devam eden hiçbir efendi / köle ya da ebeveyn / çocuk ilişkisi yoktur.


2
Kabul et - aşırı yüklenmiş olan yöntemin veya operatörün adı , yöntemin kendisi değil. Bir alt sınıfta belirli bir yöntemin uygulanmasının üst sınıftaki uygulamayı tamamladığı geçersiz kılma ile karıştırılmamalıdır .
Caleb

1
Ben de buna katılıyorum, ama bence bu açıklamada daha iyi bir iş çıkarıyor. Cevabınız için teşekkür ederim !
Willem D'Haeseleer

3

Bunu ifade etmenin iyi bir yolunun, zaman içinde sınıfa yapılan değişikliklere değil nihai sonuca odaklanmak olduğunu düşünüyorum. Bu nedenle, "foo'yu 'foo (diğer parametreler)' ile aşırı yükledim yerine," foo 'foo ()' ve 'foo (diğer parametreler) ile aşırı yüklenmiş bir işlevdir "diyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.