Metot Aşırı Yükleme
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 50 / 70.
Metot aşırı yükleme (Method overloading), aynı isme sahip ancak farklı parametre listelerine sahip birden fazla metot tanımlamanıza olanak tanır. Derleyici, sağladığınız argümanlara göre hangi sürümün çağrılacağını belirler.
Aşırı yüklenmiş her metodun benzersiz bir imzası olmalıdır - ya farklı sayıda parametre ya da farklı parametre türleri:
public static void Print(string message)
{
Console.WriteLine(message);
}
public static void Print(string message, int times)
{
for (int i = 0; i < times; i++)
Console.WriteLine(message);
}
public static void Print(int number)
{
Console.WriteLine(number);
}// Derleyici doğru sürümü seçer
Print("Hello"); // Print(string) metodunu çağırır
Print("Hi", 3); // Print(string, int) metodunu çağırır
Print(42); // Print(int) metodunu çağırırAşırı yükleme (overloading), isteğe bağlı parametrelerden önemli bir şekilde ayrılır. İsteğe bağlı parametrelerle, birden fazla senaryoyu işleyen tek bir metodunuz olur. Aşırı yükleme ile, her durum için tamamen farklı mantık içerebilen ayrı metotlara sahip olursunuz.
Yalnızca dönüş türünün metotları benzersiz kılmadığını unutmayın; yalnızca döndürdükleri değer bakımından farklılık gösteren iki metoda sahip olamazsınız. Parametre listesi farklı olmalıdır. Metot aşırı yükleme (method overloading), hangi metodun çağrılacağına dair kararın kod çalışırken değil, derlenirken verildiği bir derleme zamanı polimorfizmi (compile-time polymorphism) biçimidir.
Görev
KolayMetot aşırı yüklemenin (method overloading) gücünü gösteren çok yönlü bir hesap makinesi sınıfı oluşturalım. Basit iki sayıyla yapılan işlemlerden daha karmaşık hesaplamalara kadar farklı senaryoları yöneten, ancak hepsi aynı sezgisel metot adlarını paylaşan birden fazla hesaplama metodu versiyonu oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
Calculator.cs:MathToolsad alanı (namespace) içinde, aynı isimleri paylaşan ancak farklı parametreler alan aşırı yüklenmiş metotlara sahip birCalculatorsınıfı oluşturun:Multiply- Üç aşırı yüklenmiş versiyon oluşturun:- İki
intparametresi alan ve çarpımlarınıintolarak döndüren bir versiyon - Üç
intparametresi alan ve çarpımlarınıintolarak döndüren bir versiyon - İki
doubleparametresi alan ve çarpımlarınıdoubleolarak döndüren bir versiyon
- İki
Describe- İki aşırı yüklenmiş versiyon oluşturun:- Bir
intalan ve"Integer: {value}"döndüren bir versiyon - Bir
doublealan ve"Double: {value}"döndüren bir versiyon
- Bir
Program.cs: Ana dosyanızda birCalculatorörneği oluşturun ve derleyicinin sağladığınız argümanlara göre doğru aşırı yüklenmiş metodu nasıl otomatik olarak seçtiğini gösterin.
Dört girdi alacaksınız:
- Birinci tam sayı (örneğin,
5) - İkinci tam sayı (örneğin,
4) - Üçüncü tam sayı (örneğin,
3) - Bir ondalıklı sayı (örneğin,
2.5)
Hesap makinenizi kullanarak bu işlemleri gerçekleştirin ve her sonucu kendi satırında yazdırın:
- İlk iki tam sayıyı çarpın (iki-int versiyonunu kullanır)
- Üç tam sayının hepsini çarpın (üç-int versiyonunu kullanır)
- İlk tam sayı ile ondalıklı sayıyı çarpın (iki-double versiyonunu kullanır)
- İlk tam sayıyı tanımlayın (int versiyonunu kullanır)
- Ondalıklı sayıyı tanımlayın (double versiyonunu kullanır)
Örneğin, girdiler 5, 4, 3 ve 2.5 ise çıktı şu şekilde olmalıdır:
20
60
12.5
Integer: 5
Double: 2.5Multiply ve Describe metotlarını farklı argüman türleri ve sayılarıyla nasıl çağırdığınıza, ancak derleyicinin her seferinde tam olarak hangi versiyonu kullanacağını nasıl bildiğine dikkat edin. Bu, iş başındaki derleme zamanı polimorfizmidir (compile-time polymorphism) - karar kodunuz çalıştığında değil, derlendiğinde verilir!
Kopya kağıdı
Metot aşırı yükleme (method overloading), aynı isme fakat farklı parametre listelerine sahip birden fazla metot tanımlamanıza olanak tanır. Derleyici, sağlanan argümanlara göre hangi sürümün çağrılacağını belirler.
Aşırı yüklenen her metodun benzersiz bir imzası olmalıdır - ya farklı sayıda parametre ya da farklı parametre türleri:
public static void Print(string message)
{
Console.WriteLine(message);
}
public static void Print(string message, int times)
{
for (int i = 0; i < times; i++)
Console.WriteLine(message);
}
public static void Print(int number)
{
Console.WriteLine(number);
}
// Derleyici doğru sürümü seçer
Print("Hello"); // Print(string) metodunu çağırır
Print("Hi", 3); // Print(string, int) metodunu çağırır
Print(42); // Print(int) metodunu çağırırMetot aşırı yükleme hakkında temel noktalar:
- Aşırı yükleme, isteğe bağlı parametrelerden farklıdır - aşırı yükleme ile her durum için tamamen farklı mantık içerebilen ayrı metotlara sahip olursunuz
- Yalnızca dönüş türü metotları benzersiz kılmaz - parametre listesi farklı olmalıdır
- Metot aşırı yükleme, hangi metodun çağrılacağına dair kararın kod çalışırken değil, kod derlenirken verildiği bir derleme zamanı polimorfizmi (compile-time polymorphism) biçimidir
Kendin dene
using System;
using MathTools;
class Program
{
public static void Main(string[] args)
{
// Girdileri oku
int firstInt = Convert.ToInt32(Console.ReadLine());
int secondInt = Convert.ToInt32(Console.ReadLine());
int thirdInt = Convert.ToInt32(Console.ReadLine());
double decimalNum = Convert.ToDouble(Console.ReadLine());
// TODO: Bir Calculator örneği oluşturun
// TODO: İki tam sayı ile Multiply metodunu çağırın ve sonucu yazdırın
// TODO: Üç tam sayı ile Multiply metodunu çağırın ve sonucu yazdırın
// TODO: İlk tam sayı ve ondalıklı sayı ile Multiply metodunu çağırın, sonucu yazdırın
// TODO: İlk tam sayı ile Describe metodunu çağırın ve sonucu yazdırın
// TODO: Ondalıklı sayı ile Describe metodunu çağırın ve sonucu yazdırın
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı Yükleme