Junior
Projelerinizde soyut sınıflar kullandınız mı?
sobes.tech yapay zeka
AI'dan gelen yanıt
Evet, kullandım. Soyut sınıflar, ortak metodlar ve özelliklerle temel yapılar oluşturmak için kullanılırdı ve daha sonra belirli sınıflar tarafından miras alınırdı.
// Soyut sınıfın bildirimi
public abstract class Shape
{
// Miras alan sınıflarda uygulanması gereken soyut metod
public abstract double GetArea();
// Varsayılan uygulaması olan sanal metod, üzerine yazılabilir
public virtual void Draw()
{
Console.WriteLine("Şekil çiziliyor.");
}
}
// Shape'ten türeyen somut sınıf
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
// Soyut metodun uygulaması
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
// Sanal metodun üzerine yazılması
public override void Draw()
{
Console.WriteLine($"Yarıçapı {Radius} olan bir daire çiziliyor.");
}
}
Kullanım senaryoları:
- Genel bir sözleşme tanımlama: Soyut sınıflar, tüm türeyen sınıflarda bulunması gereken metodlar ve özellikler setini belirlemeye olanak tanır.
- Kısmi uygulama: Temel sınıfta fonksiyonelliğin kısmi uygulamasını sağlayarak, kalıtımda kod tekrarını önler.
- Tasarım kalıbı: Sıkça "Şablon Metodu" gibi kalıpların uygulanmasında kullanılır.
Arayüzlerle farkları:
| Özellik | Soyut sınıf | Arayüz |
|---|---|---|
| Miras | Çoklu kalıtım yasaktır | Çoklu uygulama izinlidir |
| Uygulama | Metodların uygulamasını içerebilir | C# 8.0'den önce - sadece bildirimler, sonrası - varsayılan uygulama |
| Üyeler | Alanlar, yapıcılar, sanal/soyut/normal metodlar içerebilir | C# 8.0 öncesi - sadece metodlar ve özellikler, sonrası - statik üyeler ve varsayılan uygulamalar |
| Durum | Durum tutabilir (alanlar aracılığıyla) | Durum tutamaz |