Menu
Coddy logo textTech

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 fakat 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.

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ır

Aşı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ığı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, derlendiği sırada verildiği bir derleme zamanı polimorfizmi (compile-time polymorphism) biçimidir.

challenge icon

Görev

Kolay

Metot 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ılık işlemlerden daha karmaşık hesaplamalara kadar farklı senaryoları yöneten ve 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: MathTools ad alanı (namespace) içinde, aynı isimleri paylaşan ancak farklı parametreler alan aşırı yüklenmiş metotlara sahip bir Calculator sınıfı oluşturun:
    • Multiply - Üç aşırı yüklenmiş versiyon oluşturun:
      • İki int parametresi alan ve çarpımlarını int olarak döndüren bir versiyon
      • Üç int parametresi alan ve çarpımlarını int olarak döndüren bir versiyon
      • İki double parametresi alan ve çarpımlarını double olarak döndüren bir versiyon
    • Describe - İki aşırı yüklenmiş versiyon oluşturun:
      • Bir int alan ve "Integer: {value}" döndüren bir versiyon
      • Bir double alan ve "Double: {value}" döndüren bir versiyon
  • Program.cs: Ana dosyanızda, bir Calculator ö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:

  1. İlk iki tam sayıyı çarpın (iki-int versiyonunu kullanır)
  2. Üç tam sayının hepsini çarpın (üç-int versiyonunu kullanır)
  3. Birinci tam sayı ile ondalıklı sayıyı çarpın (iki-double versiyonunu kullanır)
  4. Birinci tam sayıyı tanımlayın (int versiyonunu kullanır)
  5. 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.5

Multiply 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!

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
    }
}
quiz iconKendini test et

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