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

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ı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: 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. İlk tam sayı ile ondalıklı sayıyı çarpın (iki-double versiyonunu kullanır)
  4. İlk 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!

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

Metot 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
    }
}
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