virtual vs abstract
virtual ile abstract metot arasındaki farkı öğrenirsin.
virtual vs abstract
Hem virtual hem abstract metotlar alt sınıfta override edilebilir; ancak aralarında önemli farklar vardır. virtual metot gövde içerir ve override opsiyoneldir. abstract metot gövde içermez ve override zorunludur.
Virtual, «varsayılan davranış var ama değiştirilebilir» demek ister. Abstract ise «alt sınıf bu davranışı sağlamalı» der. Virtual yalnızca abstract sınıfta olmak zorunda değildir; her sınıfta bulunabilir. Abstract ise yalnızca abstract sınıfta yer alır.
Ne zaman hangisi?
Bir metot için varsayılan davranış uygunsa virtual kullan. Örnek: Account.Withdraw varsayılan olarak bakiyeyi azaltır; alt sınıf isterse değiştirebilir.
Alt sınıfın mutlaka kendi davranışını yazması gerekiyorsa abstract kullan. Örnek: Shape.Area her şekil için farklı hesaplanır; bu yüzden abstract'tır. Virtual esneklik, abstract kesin sözleşme sağlar.
Uygulama Hesap sınıfı
Account sınıfına public virtual void Withdraw(decimal amount) metodunu ekle; gövdesi Balance -= amount; ve Console.WriteLine("Çekildi: " + amount); yapsın. SavingsAccount sınıfında public override void Withdraw(decimal amount) gövdesini yaz: Balance -= amount; ve Console.WriteLine("Tasarruf: " + amount);. Main'de Account a = new SavingsAccount { Balance = 100 }; üret, a.Withdraw(20) çağır ve a.Balance'ı yazdır.
Örnek çözümü göster
" + amount); }` ekle. SavingsAccount içine `public override void Withdraw(decimal amount) { Balance -= amount; Console.WriteLine("Tasarruf: " + amount); }` ekle. Main içine `Account a = new SavingsAccount { Balance = 100 }; a.Withdraw(20); Console.WriteLine(a.Balance);` yaz.
Örnek çözüm:
using System;
class Account
{
public decimal Balance { get; set; }
public virtual void Withdraw(decimal amount)
{
Balance -= amount;
Console.WriteLine("Çekildi: " + amount);
}
}
class SavingsAccount : Account
{
public override void Withdraw(decimal amount)
{
Balance -= amount;
Console.WriteLine("Tasarruf: " + amount);
}
}
class Program
{
static void Main()
{
Account a = new SavingsAccount { Balance = 100 };
a.Withdraw(20);
Console.WriteLine(a.Balance);
}
}
Kendini test et
-
virtual vs abstract ile ilgili hangisi doğrudur?
- virtual gövde içerebilir, abstract içeremez.
- virtual ve abstract aynı şeydir.
- abstract metot virtual olarak da işaretlenmelidir.
- virtual metotlar override edilemez.
Cevabı göster
virtual gövde içerebilir, abstract içeremez. — Doğru. virtual gövdeli, abstract gövdesizdir.
-
Eşleştir: virtual vs abstract
- virtual
- gövde içerir
- abstract
- gövdesiz
- virtual override
- opsiyonel
- abstract override
- zorunlu
-
Boşluğu doldur: virtual metot
public ____ void Withdraw(decimal amount) { Balance -= amount; }Cevabı göster
public virtual void Withdraw(decimal amount) { Balance -= amount; }