İlginizi Çekebilir
C# Override Örnekleri
  1. Ana Sayfa
  2. C#
  3. C# Override Nedir?

C# Override Nedir?

Nesneye Yönelimli Programlama konusunun yapı taşlarından birisi olan override(aşırı yükleme) kavramını sizlerle “C# Override Nedir” başlığı altında detaylarına inerek konuyu derinlemesine öğreneceğiz. 🔎

Programlarımızın çalışmasını sağlayan, merkezi üst olarak kabul edilen “Main” yapısının aslında bir metot yapısı olduğunu öğrendiğim zaman metot yapılarına bakışım değişti. Nesne yönelimli programlama kavramına giriş yapmamla birlikte bu yapıyı benimsemek için pratikler uygularken yine metot yapılarından faydalandım. Override kavramı ile tanışmamla birlikte metot yapılarını daha farklı görmeye başladım. Bu yüzden sizlerle override kavramını öğrenirken edindiğim bilgileri paylaşmak istiyorum. 🤲🏻🎓

C# Override Nedir?

C# Override kavramını öğrenmek için çıkacağımız bu zorlu serüven içerisinde önce teorik olarak bazı kavramları anlatmaya daha sonra ise aklımızda bu bilgilerin canlanabilmesi ve benimsenmesini sağlayacak basit örnek yapılar kullanarak anlatımımı güçlendirmeyi planlıyorum. Eğer “C# Override Nedir” başlığı sonunda kavramı tam olarak anlayamadıysanız ve aklınızı kurcalayan herhangi bir durum oluştuysa rehber içeriğimizin sonunda yer alan “yorum yap” kısmından benimle iletişime geçebileceğinizi unutmayın.

👨🏻‍🏫 Anlatım planımı anlattığıma göre artık C# Override (aşırı yükleme) kavramını öğrenmeye başlayabiliriz.

C# Override, oluşturmuş olduğumuz sınıf yapılarında kalıtım sayesinde üst sınıftan, alt sınıfa geçiş sağlayacak metot yapılarının aktarıldığı alt sınıf yapısına uygun bir şekilde gövdesinin değiştirilmesine ve kod satırlarının yeniden şekil almasına imkan sağlayan yapıya override denmektedir. Tabii bu değişimin sağlanması için bazı uymamız ve dikkat etmemiz gereken hususların bulunduğunu unutmamalıyız.

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

Teorik olarak öğrendiğimiz bu bilgiyi pekiştirmek için bir örnekten yardım alarak tekrardan anlatımımızın üzerinden geçelim.

Örneğimiz üzerinde bir araç çalışma mantığını düşünerek başlayalım. Otomobil, motosiklet ve bisiklet araçları temel olarak aynı amaca hizmet etseler bile çalışma mantıkları bakımından farklılıklar mevcuttur. Bu farklılıklar otomobilin hareket etmesi için kontağın çalıştırılması, vites atılması ve sırasıyla debriyaj ve gaza basılması gibi olayların gerçekleşmesi gerekirken bisiklet için ise sadece pedal çevirmekten ibarettir. Yani temel mantıkta aynı olarak gözüken hareket etme eylemi araçların her birinde farklılık göstermesi, başka gereksinimlere ihtiyaç duyması olayına override denir.

Teorik olarak vermiş olduğumuz bilgiyi bir örnek yardımıyla anlamlandırabilmemiz aslında bu kadar kolay. Tabii işin mutfağına girmeden, bazı püf noktaları ve dikkat etmemiz gereken kavramları tanımadan override kavramını biliyoruz demek yanlış olabilir. Bu yüzden dikkat etmemiz gereken kurallar ve override kavramının bize sağlamış olduğu avantajları inceleyeceğimiz aşamalara geçiş yapalım. 👨🏻‍🍳👨🏻‍🏫👀

C# Override Kullanım Kuralları

  • Static ve Final olarak tanımlanmış metot yapıları override edilemez.
  • Override işlemini uyguladığımız metodun erişim belirleyicisinin seviyesini düşüremeyiz fakat yükseltebiliriz.
  • Üst sınıftan miras alınan bir metodun dönüş tipi veya parametrelerini değiştiremeyiz.
  • Üst sınıf içerisinde yer alan private metotlar override işlemine tabi tutulmaz.
  • Constructor (Kurucu / Yapıcı) metotlar override edilemez.
  • Üst sınıfımızda yer alan ve alt sınıfımızda yer alacak override işlemi uygulayacağımız metot isimleri aynı olmalıdır.
  • Override edeceğimiz metodu belirlerken virtual ve override anahtar sözcüklerini kullanmamız gerekiyor.

C# Override Kullanımının Avantajları

  • İhtiyacımız doğrultusunda temiz, sade ve anlaşılır yapılara sahip kod satırları oluşturmamıza imkan sağlar.
  • Bir sınıfımızın içerisinde bulunan metot yapılarının işlevlerini nasıl uygulayacağımızın tanımlamasını rahat bir şekilde gerçekleştirebiliriz.

İşin mutfağına girerek edindiğimiz teorik bilgiyi şekillenmesi ve kullanımını öğrenmek için çeşitli override örnekleri oluşturacağımız “C# Override Örnekleri” başlığına geçiş yapabiliriz.

C# Override Örnekleri

Edindiğimiz teorik bilgilerin kullanımı konusunda fikir sahibi olabilmek için “C# Override Nedir” başlığı altında kullandığım örneğimizi ele alalım. Böylelikle teorik olarak anlatımını sergilediğim anlatımı kod yapısı olarak destekleyeceğim.

Örneğimizin içerisinde araçlardan bahsetmiştik ve bu araçların çeşitli fonksiyonlarının bulunduğunu ve bu fonksiyonlarını aktif bir şekilde yürütmeye çalışırken bazı gereksinimlerin yerine getirilmesi gerektiğinden bahsetmiştik. Bu yapmış olduğum anlatıma göre örneğimizi ele aldığımızda genel bir taşıt sınıfının bulunması ve çeşitli fonksiyonların (metotların) yer alacağı bir yapıda temellerin oluşturulması, daha sonra otomobil, motosiklet, bisiklet gibi alt sınıfların bu oluşturmuş olduğumuz üst sınıftan türetilerek oluşmasını sağlamamız gerekiyor.

Hadi gelin birlikte bu örneği nasıl yaptığımı aşama aşama inceleyerek öğrenelim. 💪🏻

  1. Öncelikle bir taşıtın gereksinim duyacağı koşulların genel hatlarla tanımlanmasını sağlayacak üst bir sınıf olan “VehicleManager” sınıfı oluşturdum.
  2. Bu sınıfımı oluşturduktan sonra taşıtların ihtiyaç duyacağı anahtar kontrolünü ve daha sonra taşıtların hareketinin gerçekleşmesini sağlayacak metotların temelini attım.
  3. Bu işlemlerden sonra programımın “VehicleManager” sınıfının içeriği aşağıdaki halini almış oldu.

    namespace OverrideApp
    {
        class VehicleManager
        {
            protected bool carKey;
            protected int vehicleStart(bool carKey)
            {
                if (carKey == true)
                    return 1;
                else
                    return 0;
            }
    
            public virtual void vehicleMove()
            {
                Console.WriteLine("Taşıt hareket halinde");
            }
        }
    }
  4. Üst sınıfımı oluşturduktan sonra bu sınıfı kullanarak arabaların kontrolünü sağlayacağım “CarManager” isminde bir sınıf oluşturdum.
  5. Sınıfımı oluşturduktan sonra kalıtım yoluyla “VehicleManager” sınıfı ile birbirine bağladım.
  6. Daha sonra bir arabanın çalışmasını sağlayacak genel hatları düşünerek bir kontrol sistemi oluşturdum ve “vehicleMove” metot yapısının override ettim.
  7. Bu uyguladığım aşamalardan sonra oluşturmuş olduğum “CarManager” sınıf yapım aşağıdaki yapıya gelmiş oldu.

    namespace OverrideApp3
    {
        class CarManager:VehicleManager
        {
    
            protected bool gas, gasPedal, derPedal;
    
            protected string moveCheck(bool key,bool gas, bool gasPedal, bool derPedal)
            {
                int keyValue = vehicleStart(key);
                if (keyValue == 1)
                {
                    if (gas == true)
                    {
                        if (derPedal == true && gasPedal != true)
                            return "-> Arabanın hareket etmesi için lütfen gaza basın.";
                        else if (derPedal != true && gasPedal == true)
                            return "-> Arabanın hareket etmesi için lütfen debriyaj pedalına basın.";
                        else if (derPedal == false && gasPedal == false)
                            return "-> Arabanın hareket edebilmesi için debriyaj ve gaz pedallarına basın.";
                        else
                            return "-> Araba hareket haline geçti.";
                    }
                    else
                        return "-> Arabanın çalışması için yeterli yakıt bulunmamaktadır.";
                }
                else
                    return "-> Aracı çalıştırmak için anahtarınıza ihtiyacınız var.";
            }
            public override void vehicleMove()
            {
                string mark = new string('-', 6);
                Console.WriteLine("{0}\n< Araba Çalıştırma Gereksinimleri >\n{1}", mark, mark);
                Console.Write("-> Lütfen sorulan sorulara 'true' veya 'false' şeklinde cevap verin.\n{0}",mark);
                Console.Write("\n-> Aracın anahtarına sahip misiniz: ");
                carKey = Convert.ToBoolean(Console.ReadLine());
                Console.Write("-> Aracın yakıtı yeterli seviyede mi: ");
                gas = Convert.ToBoolean(Console.ReadLine());
                Console.Write("-> Aracın gaz pedalına basıyor musunuz: ");
                gasPedal = Convert.ToBoolean(Console.ReadLine());
                Console.Write("-> Aracın debriyaj pedalına basıyor musunuz: ");
                derPedal = Convert.ToBoolean(Console.ReadLine());
                Console.WriteLine("{0}\n-> Arabanın hareket haline geçmesi için gerekli kontroller sağlanıyor.\n{1}", mark, mark);
                Console.Write(moveCheck(carKey, gas, gasPedal, derPedal) + "\n{0}", mark);
            } 
        }
    }
  8. Bu işlemlerimi bitirdikten sonra örneğimin yapısından çıkmamak için “BicycleManager” isminde bir alt sınıf daha oluşturarak “vehicleMove” metodumu burada da override ettim.
  9. namespace OverrideApp
    {
        class BicycleManager:VehicleManager
        {
            private string mark = new string('-', 6);
            public override void vehicleMove()
            {
                int keyCheck;
                bool key,pedalCheck;
                Console.WriteLine("{0}\n < Bisiklet Çalıştırma Gereksinimleri >\n{1}", mark, mark);
                Console.Write("-> Lütfen sorulan sorulara 'true' veya 'false' şeklinde cevap verin.\n{0}", mark);
                Console.Write("-> Bisikletin anahtarı üzerinizde mi: ");
                key = Convert.ToBoolean(Console.ReadLine());
                keyCheck = vehicleStart(key);
                Console.Write("-> Bisiklet pedallarını çeviriyor musunuz: ");
                pedalCheck = Convert.ToBoolean(Console.ReadLine());
                if (pedalCheck == true && keyCheck == 1)
                    Console.WriteLine("{0}\n-> Bisiklet harekete geçti.\n{1}",mark,mark);
                else if(pedalCheck == false && keyCheck == 1)
                    Console.WriteLine("{0}\n-> Bisikletin harekete geçmesi için lütfen pedalları çevirin.\n{1}", mark, mark);
                else if(pedalCheck == true && keyCheck == 0)
                    Console.WriteLine("{0}\n-> Bisikletin harekete geçmesi için lütfen anahtarınız ile kilidini açın.\n{1}", mark, mark);
                else
                    Console.WriteLine("{0}\n-> Bisikletin harekete geçmesi için anahtara ve pedalları çevirmeye ihtiyacınız var.\n{1}", mark, mark);
    
            }
        }
    }
    
  10. Uyguladığım bu aşamalardan sonra programımın çalışmasını görebilmek için “Main” sınıf yapıma gelerek uygulamanın kontrolünü gerçekleştireceğim tanımlamalarda bulundum.
  11. namespace OverrideApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                VehicleManager vehicle = new CarManager();
                vehicle.vehicleMove();
            }
        }
    }

Kod Çıktısı:

C# Override Nedir
C# Override Örnekleri #1

Evet, üst sınıfımızdaki “vehicleMove” metodumuzun içeriği “CarManager” sınıfı içerisinde override işlemi sonucunda nasıl değiştiğini gözlemledik. Gelin birde bu yapımızı “BicycleManager” sınıfımız gözünden inceleyerek kod çıktısına göz atalım.

Kod Çıktısı:

C# Override Örnekleri
C# Override Örnekleri #2

C# Override Nedir” sorusuna cevap vermiş olduğum bu rehber içeriğime ek olarak Microsoft tarafından hazırlanmış bir kaynağa göz atarak takviye yapmak isterseniz buradan ilgili içeriğe gidebilirsiniz.

Umarım sizler için açıklayıcı ve öğretici bir rehber içeriği olabilmiştir. Unutmayın aklınıza takılan herhangi bir soruyu ya da konu işleyişi hakkında aklınıza gelen bir fikri aşağıda bulunan yorum yap kısmından bana iletebilirsiniz. 👋🏻

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