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, aynı ada ancak farklı parametre listelerine sahip birden çok metot tanımlamanı sağlar. Derleyici, sağladığın bağımsız değişkenlere göre hangi sürümün çağrılacağını belirler.
Her aşırı yüklenmiş (overloaded) 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ı metodlarınız olur.
Yalnızca dönüş türünün metotları benzersiz kılmadığına dikkat et - yalnızca döndürdükleri değere göre farklılık gösteren iki metoda sahip olamazsın. Parametre listesi farklı olmalıdır. Metot aşırı yükleme, hangi metodun çağrılacağına ilişkin kararın kod çalıştırıldığında değil, kod derlendiğinde verildiği bir derleme zamanı polimorfizmi biçimidir.
Görev
KolayMetot aşırı yüklemesinin gücünü gösteren çok yönlü bir hesap makinesi sınıfı oluşturalım. Farklı senaryoları (basit iki sayılı işlemlerden daha karmaşık hesaplamalara kadar) ele alan ve aynı sezgisel metot adlarını paylaşan birden çok hesaplama metodu sürümü oluşturacaksın.
Kodunu iki dosya arasında düzenleyeceksin:
Calculator.cs: Farklı parametreler kabul eden, aynı adları paylaşan aşırı yüklenmiş metotlara sahipCalculatorad alanında birMathToolssınıfı oluştur:Multiply- Aşırı yüklenmiş üç sürüm oluştur:- İki
intparametresi alan ve çarpımlarınıintolarak döndüren bir sürüm - Üç
intparametresi alan ve çarpımlarınıintolarak döndüren bir sürüm - İki
doubleparametresi alan ve çarpımlarınıdoubleolarak döndüren bir sürüm
- İki
Describe- Aşırı yüklenmiş iki sürüm oluştur:- Bir
intalan ve"Integer: {value}"döndüren bir sürüm - Bir
doublealan ve"Double: {value}"döndüren bir sürüm
- Bir
Program.cs: Ana dosyanda birCalculatorörneği oluştur ve derleyicinin, sağladığın bağımsız değişkenlere göre doğru aşırı yüklenmiş metodu otomatik olarak nasıl seçtiğini göster.
Dört girdi alacaksın:
- Birinci tam sayı (ör.
5) - İkinci tam sayı (ör.
4) - Üçüncü tam sayı (ör.
3) - Ondalık sayı (ör.
2.5)
Hesap makinenizi kullanarak şu işlemleri gerçekleştirin ve her sonucu kendi satırına yazdırın:
- İlk iki tam sayıyı çarpın (iki int sürümünü kullanır)
- Üç tam sayının tümünü çarpın (üç int sürümünü kullanır)
- İlk tam sayı ile ondalık sayıyı çarpın (iki double sürümünü kullanır)
- İlk tam sayıyı açıklayın (int sürümünü kullanır)
- Ondalık sayıyı açıklayın (double sürümünü 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ı bağımsız değişken türleri ve sayılarıyla çağırmana rağmen derleyicinin her seferinde tam olarak hangi sürümü kullanacağını bildiğine dikkat et. Bu, derleme zamanı çok biçimliliğinin iş başındaki hâlidir; karar kodun çalıştırıldığı sırada değil, derlendiği sırada verilir!
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ştur
// TODO: İki tam sayı ile Multiply metodunu çağır ve sonucu yazdır
// TODO: Üç tam sayı ile Multiply metodunu çağır ve sonucu yazdır
// TODO: İlk tam sayı ve ondalıklı sayı ile Multiply metodunu çağır, sonucu yazdır
// TODO: İlk tam sayı ile Describe metodunu çağır ve sonucu yazdır
// TODO: Ondalıklı sayı ile Describe metodunu çağır ve sonucu yazdır
}
}
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üklemeKendi başına pratik yap: Online C# derleyicisi