Program Örnekleriyle C# Kalıtım ve Çok Biçimlilik

⚡ Akıllı Özet

C#'da kalıtım ve polimorfizm, nesne yönelimli programlamanın iki temel prensibidir. Kalıtım, alt sınıfın üst sınıfın alanlarını ve metotlarını yeniden kullanmasına olanak tanırken, polimorfizm bir metot adının birçok farklı biçim almasına izin verir.

  • 🧬 Kalıtım: Alt sınıf, üst sınıfının alanlarını ve metotlarını miras alır ve kendi alanlarını ve metotlarını da ekleyebilir.
  • 🔒 Koruma altındaki üyeler: Üst sınıf alanlarını korumalı olarak işaretlemek, türetilmiş alt sınıfın bunları doğrudan yeniden kullanmasına olanak tanır.
  • 🧩 Polimorfizm: Bir metot adı birçok farklı biçimde olabilir, bu nedenle tek bir çağrı bağlama göre farklı şekilde davranır.
  • 🔀 Metot aşırı yüklemesi: Birkaç yöntem aynı adı paylaşır ancak parametreleri farklıdır ve bu farklılık derleme zamanında çözümlenir.
  • 🧱 Code yeniden kullanım: Her iki prensip de tekrarlanan kodları ortadan kaldırır ve ilgili sınıfların tutarlılığını sağlar.
  • 🤖 Yapay zeka yardımı: GitHub Copilot temel ve türetilmiş sınıfların iskeletini oluşturur; ML.NET ise sınıf hiyerarşilerini model girdisi olarak yeniden kullanır.

C# Kalıtım ve Polimorfizm

C#'ta Kalıtım Nedir?

miras C#'ın önemli bir kavramıdır. Kalıtım, ana sınıfları ve alt sınıfları tanımladığınız bir kavramdır. Alt sınıflar ana sınıfın yöntemlerini ve özelliklerini miras alır, ancak aynı zamanda gerekirse yöntemlerin davranışını da değiştirebilirler. Gerekirse alt sınıf kendi yöntemlerini de tanımlayabilir.

Bir Program Örneği ile C# Kalıtımını daha iyi anlayalım:

C# Kalıtım Örneği

Şimdi miras kavramını kodumuza nasıl dahil edebileceğimizi görelim.

) 1 Adım İlk adım, Tutorial sınıfımızın kodunu değiştirmektir. Bu adımda Tutorial.cs dosyasına aşağıdaki kodu ekliyoruz.

C# Kalıtım Örneği

Artık 'korumalı' erişim değiştiricisini hem TutorialID hem de TutorialName alanına eklememiz gerektiğini unutmayın.

Hatırlarsanız bu erişim değiştiricisinden bahsetmiştik. Erişim Değiştirici Eğitimiİşte bunun amacını burada görebilirsiniz. Yalnızca bu erişim değiştiriciye (protected) sahip olduğunuzda, alt sınıf üst sınıfın alanlarını kullanabilir.

) 2 Adım İkinci adım, yeni alt sınıfımızı eklemektir. Bu sınıfın adı "Guru"99Tutorial". Bu adımda, aşağıdaki kodu Tutorial.cs dosyasına ekliyoruz. Kod, Tutorial sınıf tanımından sonra yerleştirilmelidir.

C# Kalıtım Örneği

Code Açıklama:-

  1. İlk adım, oluşturmaktır. Guru99Tutorial alt sınıfı. Ayrıca bu sınıfın Tutorial sınıfının bir alt sınıfı olacağını da belirtmemiz gerekiyor. Bu, ':' anahtar kelimesiyle yapılır.
  2. Daha sonra RenameTutorial adında bir yöntem tanımlıyoruz. TutorialName alanını yeniden adlandırmak için kullanılacaktır. Bu yöntem, Öğreticinin yeni adını içeren bir dize değişkenini kabul eder.
  3. Daha sonra TutorialName alanına pNewName parametresini atadık. not: – Her ne kadar “Guru"99Tutorial" sınıfında bile bu alana hala erişebiliyoruz. Bunun sebebi, "Guru"99Tutorial" sınıfı, Tutorial sınıfının alt sınıfıdır. Tutorial sınıfının alanlarını protected olarak tanımladığımız için, bu sınıf tarafından da erişilebilirler.

) 3 Adım Son adım, ana Program.cs dosyamızı değiştirmektir. Konsol uygulamamızda, bir nesnesi oluşturacağız. Guru99Tutorial sınıfı. Bu nesneyle, RenameTutorial yöntemini çağıracağız. Ardından, GetTutorial yöntemi yardımıyla TutorialName alanını görüntüleyeceğiz.

C# Kalıtım Örneği

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 public class Tutorial
 {
  protected int TutorialID; 
  protected string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  
  public String GetTutorial()
  {
   return TutorialName;
  }
 }
  public class Guru99Tutorial:Tutorial
  {
   public void RenameTutorial(String pNewName)
   {
    TutorialName=pNewName;
   }
  
  static void Main(string[] args) 
  {
   Guru99Tutorial pTutor=new Guru99Tutorial();
   
   pTutor.RenameTutorial(".Net by Guru99");
    
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Açıklama:-

  1. İlk adım, bunun için bir nesne oluşturmaktır. Guru99Tutorial sınıfı. Bu işlem 'new' anahtar kelimesiyle yapılır. Bu sefer Tutorial sınıfının bir nesnesini oluşturmadığımıza dikkat edin.
  2. RenameTutorial yöntemini kullanıyoruz. Guru99Tutorial sınıfı, TutorialName alanını değiştirmek için kullanılır. ".Net by" dizesini iletiyoruz. Guru99” RenameTutorial yöntemine.
  3. Ardından GetTutorial yöntemini çağırıyoruz. Bu yöntemin tanımlı olmamasına rağmen, Guru99Tutorial sınıfında, bu metoda hala erişebiliyoruz. GetTutorial metodunun çıktısı daha sonra Console.WriteLine metodu aracılığıyla konsola yazdırılıyor.

Yukarıdaki kod doğru bir şekilde girilir ve program başarıyla çalıştırılırsa aşağıdaki çıktı gösterilecektir.

Çıktı:

C# Kalıtım Örneği

Çıktıdan da açıkça görülebildiği gibi, TutorialName alanı ".Net tarafından" olarak yeniden adlandırılmıştır. Guru99”. Bu, alt sınıf tarafından çağrılan RenameTutorial yöntemi sayesinde mümkün oldu.

C#'ta Polimorfizm nedir?

Polimorfizm in C# Bir ismin birçok farklı biçime sahip olabileceği bir OOP (Nesne Yönelimli Programlama) kavramıdır. Örneğin, iletişim için bir akıllı telefonunuz var. Seçtiğiniz iletişim modu her şey olabilir. Arama, kısa mesaj, resimli mesaj, e-posta vb. Yani amaç ortak, yani iletişim, ancak yaklaşımları farklı. Buna Polimorfizm denir.

Aşağıdaki Program Örneği ile C# Polimorfizmini daha iyi anlayacaksınız:

C# Polimorfizm Örneği

Şimdi Polimorfizm kavramını kodumuza nasıl dahil edebileceğimize bakalım.

) 1 Adım İlk adım, Tutorial sınıfımızın kodunu değiştirmektir. Bu adımda Tutorial.cs dosyasına aşağıdaki kodu ekliyoruz.

C# Polimorfizm Örneği

Code Açıklama:-

1 ve 2) İlk adım, önceki örneklerimizdekiyle aynıdır. Bizler...ping SetTutorial metodunun tanımı şu şekildedir.

3) Bu yöntem, TutorialID ve TutorialName'i pID ve pName parametrelerine göre ayarlar.

4) Burası sınıfımızda bir değişiklik yaptığımız ve SetTutorial ile aynı adı taşıyan yeni bir yöntem eklediğimiz yerdir. Ancak bu sefer sadece pName parametresini geçiyoruz. Bu yöntemde sadece TutorialName alanını pName olarak ayarlıyoruz.

) 2 Adım Son adım, ana Program.cs dosyamızı değiştirmektir. Konsol uygulamamızda, bir nesnesi oluşturacağız. Guru99Öğretim dersi.

C# Polimorfizm Örneği

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Tutorial
 {
  public int TutorialID; 
  public string TutorialName;
  
  public void SetTutorial(int pID,string pName) 
  {
   TutorialID=pID;
   TutorialName=pName;
  }
  public void SetTutorial(string pName) 
  {
   TutorialName=pName;
  }
  public String GetTutorial()
  {
   return TutorialName;
  }
  
  static void Main(string[] args) 
  {
   Tutorial pTutor=new Tutorial();
   
   pTutor.SetTutorial(1,"First Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
   
   pTutor.SetTutorial("Second Tutorial");
   Console.WriteLine(pTutor.GetTutorial());
    
   Console.ReadKey(); 
  }
 }
}

Code Açıklama:-

  1. İlk adımda SetTutorial metodunu 2 parametre ile kullanıyoruz. Hem TutorialID'yi hem de TutorialName'i bu yönteme aktarıyoruz.
  2. İkinci adımda artık SetTutorial metodunu tek parametre ile çağırıyoruz. Bu metoda sadece TutorialName’i aktarıyoruz.

Yukarıdaki kod düzgün bir şekilde girilirse ve program çalıştırılırsa aşağıdaki çıktı görüntülenecektir. Eğer Tutorial ID'yi Tutorial Name ile birlikte almak isterseniz, aşağıdaki adımı takip etmelisiniz

  1. public int GetTutorialID adında ayrı bir yöntem oluşturun
  2. Bu yöntemde "return TutorialID" kod satırını yazın. Bu, TutorialID'yi çağıran programa döndürmek için kullanılabilir.

Çıktı:

C# Polimorfizm Örneği

Çıktıdan her iki yöntemin de başarıyla çağrıldığını açıkça görebiliriz. Bu nedenle konsola “Birinci Eğitim” ve “İkinci Eğitim” dizeleri gönderildi.

SSS

C#, sınıflar aracılığıyla tek seviyeli, çok seviyeli ve hiyerarşik kalıtımı destekler. Çoklu kalıtım ise yalnızca arayüzler aracılığıyla mümkündür.

Hayır. AC# sınıfları yalnızca tek bir temel sınıftan miras alır. Çoklu miras ise bunun yerine birden fazla arayüz kullanır.

Aşırı yükleme, derleme zamanında farklı parametrelerle tek bir ad kullanır. Geçersiz kılma ise çalışma zamanında sanal bir temel yöntemi yeniden tanımlar.

`virtual` anahtar kelimesi, temel bir metodu geçersiz kılınabilir hale getirir; `override` anahtar kelimesi ise onu türetilmiş bir sınıfta yeniden tanımlar.

`base` anahtar kelimesi, türetilmiş bir sınıfın üst sınıfın kurucusunu çağırmasına veya gizli ya da geçersiz kılınmış temel sınıf üyelerine erişmesine olanak tanır.

Sınıfı "mühürlü" olarak işaretleyin. Mühürlü bir sınıf temel sınıf olamaz; bu, daha fazla kalıtımı önler ve performansı artırır.

Evet. GitHub Copilot, temel ve alt sınıfları oluşturur ve bir yorumdan veya sınıf adından sanal ve geçersiz kılma yöntemleri ekler.

ML.NET, paylaşılan üyeleri miras alan veri ve tahmin sınıfları tanımlar ve işlem hattı ortak bir dönüştürücü temel türünü yeniden kullanır.

Bu yazıyı şu şekilde özetleyin: