İlginizi Çekebilir
C# Overload Nedir
  1. Ana Sayfa
  2. C#
  3. C# Overloading Nedir?

C# Overloading Nedir?

Constructor ve Metot kavramlarını anlatırken daha önce önce kısada olsa konu içerisinde overloading (aşırı yükleme) kavramından bahsetmiştim. Bu içeriğimizde konun derinlemesine girerek “C# Overloading Nedir” sorusuna cevap arayacağız.

Algoritmalarımızda oluşturmuş olduğumuz yapılara esneklik ve fonksiyonel açıdan çeşitlilik oluşturacak, nesne yönelimli programlama konusunun öğrenilmesi ve uygulanması en kolay konu başlıklarından biri olan overload kavramını ele alarak öğrenme yolunda çıktığımız bu serüvende bir adım daha atalım. 💪🏻

C# Overloading Nedir

Anlatımımda “Nesne Yönelimli Programlama” içerisinde önemli bir yeri olan aşırı yükleme kavramını detaylı bir şekilde anlatabilmek için önce konunun teorik bilgisini daha sonra ise bu teorik bilginin aklımızda canlanabilmesini ve rahat bir şekilde anlamlaştırabilmemiz için basit bir örnek uygulama üzerinden teorik bilgiyi destekleyecek bir yol izleyeceğim.

C# Overloading, uygulamalarımız içerisinde oluşturmuş olduğumuz metot yapılarının yeniden yazılmasına, esneklik kazanmasına ve daha fazla işlevsel bir yapıya geçmesine imkan sağlayarak aynı isimde birden fazla parametreleri farklı metodumuzun oluşmasına imkan sağlayan yapıdır.

Teorik olarak bu bilgiyi anlamamız zor veya anlasak bile aklımızda canlandırma yapmamız mümkün olmayabilir. Bunun için karşımıza oldukça çok çıkan bir internet sitesine kayıt olma bölümünü ele alarak öğrenmemize yardımcı olacak bir örnek uygulaması üzerinden anlatım gerçekleştirelim.

Örneğimiz üzerinde bir internet sitesinin kayıt olma penceresini düşünerek başlayalım. Başarılı bir şekilde kayıt olabilmek için ilgili internet sitesi kullanıcılardan bazı bilgileri girmesini ister. Bu bilgilerden bazıları zorunlu doldurulması gerekirken bazı alanların tercihe bağlı olarak doldurmaya müsait olduğunu belirten bir yapı hakim olur. Bu yapıyı ele alarak örneğimizi detaylandırırsak, bir kullanıcı zorunlu alanların doldurulmasından sonra tercihine bağlı bir şekilde diğer alanları doldurabileceği gibi boşta bırakabilir.

👨🏻‍💻 Bu örneğimizi algoritma üzerinde düşünecek olursak kayıt olma eylemi programımızın metot yapısını oluşturur. Kayıt olmak için girilen her bir bilgi ise metot yapımızın sahip olduğu parametrelerdir. Bu metot yapımızın içerisindeki parametre sayısını arttırarak yeni bir kayıt olma metodu oluşturmamız ise overloading kavramının bizzat kendisi olacaktır.

C# Overriding ve Overloading Arasındaki Fark
C# Overloading Nedir

Teorik olarak örnek ile desteklemiş olduğum “C# Overloading Nedir” sorusunun tanımını gerçekleştirdiğime göre artık aşırı yükleme kavramını kullanırken dikkat etmemiz gereken noktaları konuşabiliriz.

Overloading (Aşırı Yükleme) Yaparken Uymamız Gereken Kurallar

Metot yapılarımızda aşırı yükleme (overload) işlemini gerçekleştirebilmek için bazı noktalara dikkat etmemiz gerekmektedir. Bu dikkat edeceğimiz ve uygulamamız gereken noktalar şu şekildedir:

  • Overload işlemini gerçekleştirmiş olduğumuz metot yapılarının dönüş tipleri birbirinden farklı olabilir. Örneğin: string metot (parametre1) ve double metot (parametre1 ve parametre2) şeklinde dönüş tiplerini değiştirmemiz mümkündür.
  • Metot yapılarımızın içerisindeki parametre yapıları farklı olmalıdır. Örneğin: metot (prm1), metot (prm1,prm2) ve metot (prm1,prm2,prm3) şeklinde olmalıdır.
  • Overload işlemini yapacağımız metotların isimleri aynı olmalıdır.

Algoritmalarımızda artık metot yapılarını tanımlarken nasıl overloading işlemi uygulamamız gerektiği konusunda bir fikir sahibi olduk. Bu yüzden bu edindiğimiz bilgiyi çeşitli örnekler üzerinden görme vaktinin geldiğini düşünüyorum. Hazırsanız bir sonraki aşamamız olan “C# Overloading Örnekleri” çözümlerine geçiş yapabiliriz. 🧑🏻‍💻👨🏻‍💻

C# Overloading Örnekleri

Hafızımızda aşırı yükleme kavramının rahatlıkla yer edebilmesini ve teorik bilgiyi daha kolay bir şekilde anlamlandırmayı sağlamak için anlatım esnasında kullandığım “kayıt olma penceresi” örneğini ele alarak ilk adımımızı atmak istiyorum.

Örneğimizi hatırlamak için ve nasıl bir şablon üzerinden ilerleyeceğimi kararlaştırmak için örnek yapımızı tekrardan hatırlayalım. Örneğimiz üzerinde bir kayıt formunu ele alarak bazı bilgilerin zorunlu olarak doldurulmasının gerektiğini ve bazı bilgilerin kullanıcı tercihine göre doldurulacağından bahsetmiştim. Bu yapıyı bozmadan ilk örneğimiz olan bu yapıyı oluşturmaya başlayalım.

Unutmayın, bu yapıyı oluştururken izlemiş olduğum aşamaları aşağıdaki maddelerden takip edebilir ve sizlerde eş zamanlı olarak uygulayabilirsiniz.👨🏻‍💻 💪🏻

  1. Kayıt işlemlerini oluşturmak için kullanacağım metotların yer alacağı “RegisterManager” isminde bir sınıf oluşturarak örneğimin ilk adımını attım.
  2. Sınıfımı oluşturduktan sonra kullanıcı adı, şifre, isim ve soyad gibi verileri tutacağım değişkenlerin tanımlamasını gerçekleştirdim.
  3. Bu değişkenleri tanımladıktan sonra kullanıcıların kayıt olmasını sağlayacak metot yapılarımın inşaatına başladım. Bu yapıma göre “kullanıcı adı ve şifresi” zorunlu alan olarak her metot üzerinde bulunması gereken bir özellik haline geldi.
  4. Bu zorunlu alanların yeterli uzunlukta doldurulduğunun kontrolünü sağlayacak ve kullanıcı bilgilerinin yazdırılmasını sağlayacak iki adet daha metot tanımlaması gerçekleştirdim.
  5. Bu tanımlamalar sonucunda “RegisterManager” ismindeki sınıf yapım aşağıdaki hale gelmiş oldu.

    namespace ConsoleApp3
    {
        class RegisterManager
        {
            private string userName, userPass, personName, personSurname,mark = new string ('-',6);
    
            private string checkRegister(string userName,string userPass)
            {
                if (userName.Length > 3)
                {
                    if (userPass.Length > 5)
                    {
                        this.userName = userName;
                        this.userPass = userPass;
                        return mark + "\n-> Kaydınız başarılı bir şekilde gerçekleştirildi.\n" + mark;
                    }
                    else
                       return mark+"\n-> Kaydınız onaylanmadı. Lütfen şifre uzunuluğunuzu arttırın.\n"+ mark;
                }
                else
                   return mark+"\n-> Kaydınız onaylanmadı. Lütfen kullanıcı adınızı tekrar yazın.\n"+mark;
            }
            public void register(string userName, string userPass)
            {
                Console.WriteLine(checkRegister(userName, userPass));
                   
            }
            public void register(string userName, string userPass,string personName)
            {
                if (personName.Length > 2)
                {
                    this.personName = personName;
                    Console.WriteLine(checkRegister(userName, userPass));
                }
                else
                    Console.WriteLine("{0}\n-> Kaydınızı oluşturamadım. Lütfen isminizin doğru girildiğinden emin olun.\n{1}", mark, mark);        
            }
            public void register (string userName,string userPass, string personName,string personSurname)
            {
                if(personName.Length > 2 && personSurname.Length > 2)
                {
                    this.personName = personName;
                    this.personSurname = personSurname;
                    Console.WriteLine(checkRegister(userName, userPass));
                }
                else
                    Console.WriteLine("{0}\n-> Kaydınızı oluşturamadım. Lütfen isim ve soyadınızın doğru girildiğinden emin olun.\n{1}", mark, mark);
            }
    
            public void infoBox()
            {
                if (userName != null && userPass != null)
                {
                    if (personName != null && personSurname != null)
                        Console.WriteLine("< Kullanıcı Bilgileri >\n{0}\n-> Kullanıcı adı: {1}\n-> Kullanıcı şifresi: {2}\n-> Kullanıcı ismi: {3}\n-> Kullanıcı soyadı: {4}\n{5}", mark, userName, userPass, personName, personSurname, mark);
    
                    else if(personName != null && personSurname == null)
                        Console.WriteLine("< Kullanıcı Bilgileri >\n{0}\n-> Kullanıcı adı: {1}\n-> Kullanıcı şifresi: {2}\n-> Kullanıcı ismi: {3}\n{4}", mark, userName, userPass, personName, mark);
                    else
                    Console.WriteLine("< Kullanıcı Bilgileri >\n{0}\n-> Kullanıcı adı: {1}\n-> Kullanıcı şifresi: {2}\n{3}", mark, userName, userPass, mark);
    
                }
                    else
                    Console.WriteLine("-> Kullanıcı bilgileri bulunamadı. Lütfen bir kullanıcı oluşturun.\n{0}", mark);
            }
    
        }
    }
  6. Bu tanımlamadan sonra yazmış olduğum programı test etmek için “Main” sınıfıma giderek ilgili tanımlamaları gerçekleştirdim.
  7. Bu tanımlama işlemlerinden sonra “Main” sınıfım aşağıdaki halini almış oldu.

    namespace OverloadApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                RegisterManager manager = new RegisterManager();
                manager.register("admin", "root123", "Emre", "Çelen");
                manager.infoBox();
            }
        }
    }

Kod Çıktısı:

C# Overloading Nedir
C# Overloading Örnekleri #1

Oluşturmuş olduğumuz kayıt formu ekranına göre kullanıcılara toplamda üç farklı kayıt olma imkanı sağlayan metot yapılarımız var. Bu metot yapılarına göre kullanıcı isterse sadece kullanıcı adı ve şifresini belirterek kayıt olabilir isterse bu bilgilere isim ve soyad gibi ekstra eklemelerde gerçekleştirebilir.

Bu metot yapılarından sadece zorunlu alanları doldurduğumuz ilk temel metodumuzu ele alarak kod çıktısını aşağıdan kontrol edelim ve farklılıkları gözlemleyelim.

Kod Çıktısı:

C# Overloading Örnekleri
C# Overloading Örnekleri #2

Aşırı yükleme (overload) işlemi ile birbirinden bağımsız, farklı etkileri olan fakat aynı isime sahip metot oluşturmak gördüğünüz gibi kolay bir işlem.

Bu işlemi farklı bir bakış açısı kazanmak için klasik hale gelen “hesap makinesi” örneği ile tekrar ele alalım ve daha sonra rehber içeriğimizi sonlandıralım.

Basit bir hesap makinesinde toplama, çıkartma, çarpma ve bölme gibi dört temel işlem bulunur. Bu işlemlerin gerçekleşmesi için minimum iki değer gerekmektedir. Bu kavramları beynimizde canlanması için dört temel kavramı metotlar olarak, işlemlerin gerçekleşmesi için gereken minimum değerleri ise metotlarımızın aldığı parametreler olarak düşünebiliriz. 🧮👨🏻‍🏫

Örnek yapımızın kısa bir tanımını gerçekleştirdiğime göre artık bu örneği kod olarak hayata geçirmenin vaktinin geldiğini düşünüyorum. Bunun için ise uyguladığım aşamalar şu şekildedir:

  1. Öncelikle hesap işlemlerinin gerçekleşmesini sağlayacak metotların ve değişkenlerin tutulacağı “CalculatorManager” isminde bir sınıf oluşturdum.
  2. Atanan değerleri ve yapılan işlemin ne olduğunu hafızada tutacak değişkenlerin tanımlamasını gerçekleştirdim.
  3. Temel iki parametreden oluşan toplama, çıkartma, çarpma ve bölme işlemlerinin gerçekleşeceği metotların tanımlamasını yaptım.
  4. Bu temel tanımlamalardan sonra overload işlemi için toplama ve çıkartma metotlarını kullanarak üçüncü parametrelerin atamasını gerçekleştirdim.
  5. CalculatorManager sınıfım içerisinde son olarak işlem sonucunu ekrana yazdırabileceğim bir infoBox isminde metot tanımladım.
  6. Bu işlemlerden sonra “CalculatorManager” ismindeki sınıfım aşağıdaki hale geldi.

    namespace OverloadApp
    {
        class CalculatorManager
        {
            private double prm1, prm2, prm3=-9.87;
            private string cal;
            
            public double toplama(double prm1,double prm2)
            {
                this.prm1 = prm1;
                this.prm2 = prm2;
                this.cal = "2 Parametreli Toplama İşlemi";
                return (prm1 + prm2);
            }
            public double cikartma(double prm1, double prm2)
            {
                this.prm1 = prm1;
                this.prm2 = prm2;
                this.cal = "2 Parametreli Çıkartma İşlemi";
                return (prm1 - prm2);
            }
            public double carpma (double prm1, double prm2)
            {
                this.prm1 = prm1;
                this.prm2 = prm2;
                this.cal = "2 Parametreli Çarpma İşlemi";
                return (prm1*prm2);
            }
            public double bolme(double prm1, double prm2)
            {
                if (prm1 == 0 && prm2 == 0)
                    return 0;
                else if (prm2 == 0)
                    return 0;
                else
                {
                    this.prm1 = prm1;
                    this.prm2 = prm2;
                    this.cal = "2 Parametreli Bölme İşlemi";
                    return (prm1 / prm2);
                }
            }
            
            /// Overloading İşlemini Toplama & Çıkartma İşlemleri İçin Gerçekleştirelim:
            
            public double toplama(double prm1,double prm2,double prm3)
            {
                this.prm1 = prm1;
                this.prm2 = prm2;
                this.prm3 = prm3;
                this.cal = "3 Parametreli Toplama İşlemi";
                return (prm1 + prm2 + prm3);
            }
            public double cikartma (double prm1,double prm2, double prm3)
            {
                this.prm1 = prm1;
                this.prm2 = prm2;
                this.prm3 = prm3;
                this.cal = "3 Parametreli Çıkartma İşlemi";
                return (prm1 - prm2 - prm3);
            }
    
            public void infoBox()
            {
                string mark = new string('-', 6);
                if(prm3==-9.87)
                    Console.WriteLine("{0}\n< {1} >\n{2}\n-> Girilen İlk Değer: {3}\n-> Girilen İkinci Değer: {4}\n{5}", mark, cal, mark, prm1, prm2, mark);
                else if (prm3 != -9.87)
                    Console.WriteLine("{0}\n< {1} >\n{2}\n-> Girilen İlk Değer: {3}\n-> Girilen İkinci Değer: {4}\n-> Girilen Üçüncü Değer: {5}\n{6}", mark, cal, mark, prm1, prm2,prm3, mark);
                if (cal.Contains("Toplama"))
                {
                    if (cal.Contains("2"))
                        Console.WriteLine("[{0}] + [{1}] işleminin sonucu {2} değeridir.\n{3}", prm1, prm2, toplama(prm1, prm2), mark);
                    else
                        Console.WriteLine("[{0}] + [{1}] + [{2}] işleminin sonucu {3} değeridir.\n{4}", prm1, prm2, prm3, toplama(prm1, prm2, prm3), mark);
                }
                else if (cal.Contains("Çıkartma"))
                {
                    if (cal.Contains("2"))
                        Console.WriteLine("[{0}] - [{1}] işleminin sonucu {2} değeridir.\n{3}", prm1, prm2, cikartma(prm1, prm2), mark);
                    else
                        Console.WriteLine("[{0}] - [{1}] - [{2}] işleminin sonucu {3} değeridir.\n{4}", prm1, prm2, prm3, cikartma(prm1, prm2, prm3), mark);
                }
                else if (cal.Contains("Çarpma"))
                    Console.WriteLine("[{0}] * [{1}] işleminin sonucu {2} değeridir.\n{3}", prm1, prm2, carpma(prm1, prm2), mark);
                else if (cal.Contains("Bölme"))
                    Console.WriteLine("[{0}] / [{1}] işleminin sonucu {2} değeridir.\n{3}", prm1, prm2, bolme(prm1, prm2), mark);
                else
                    Console.WriteLine("-> Bir hata ile karşılaştım. Lütfen tekrar deneyin.\n{0}", mark);
    
            }
        }
    }
  7. Son olarak yapmış olduğum sınıfı test etmek için “Main” sınıfıma aşağıda göreceğiniz tanımlamayı gerçekleştirdim ve programın çıktısını kontrol ettim.
  8. namespace OverloadApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                CalculatorManager manager = new CalculatorManager();
                manager.toplama(258, 1019, 742);
                manager.infoBox();
            }
        }
    }

Kod Çıktısı:

C# Overload Örnekleri
C# Overloading Örnekleri #3

Bu işlemin birde iki parametre almış hali olan 258 ve 1019 değerlerindeki toplama metodumuzun çıktısına göz atalım.

Kod Çıktısı:

C# Overload Nedir
C# Overloading Örnekleri #4

Eğer farklı bir bakış açısı ile overloading (aşırı yükleme) kavramını incelemek isterseniz Microsoft tarafından hazırlanmış “C# Overloading Nedir” ismindeki rehber içeriğine göz atmanızı öneririm. Bahsetmiş olduğum içeriğe buraya tıklayarak ulaşabilirsiniz.

Unutmayın aklınıza takılan, sormak istediğiniz ya da konu işleyişi hakkında bir öneride bulunmak istiyorsanız aşağıda yer alan yorum yap kısmından benimle iletişime geçebilirsiniz. 👋🏻

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap