Sanal metotların gücünü daha iyi kavramak için bu metotları TwoDShape sınıfına uygulayacağız. önceki örneklerde, TwoDShape'ten türetilen her sınıf, area() adında bir metot tanımlamaktaydı. Bu kullanım bize bir fikir verir: area()'yı TwoDShape sınıfının bir sanal metodu yapmak çok daha iyi olabilir. Bu sayede, türetilmiş sınıfların her biri area()'yı devre dışı bırakabilir ve sınıf içinde belirtilen şeklin alanının nasıl hesaplandığını da tanımlayabilir. Aşağıdaki program bunu gerçekleştirir. Kolaylık sağlamak için TwoDShape'e ayrıca bir de isim özelliği eklenmektedir. (Bu, sınıfları göstermeyi kolaylaştırır.)
metot etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
metot etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Devre dışı bırakılan metotlara neden gerek var? [12]
Devre dışı bırakılan metotlar, C#'ın çalışma zamanında gerekli olan çok biçimliliği desteklemesine olanak tanır. Çok biçimlilik nesne yönelimli programlama için gereklidir, çünkü çok biçimlilik bir yandan bir genel sınıfın tüm türevlerinde ortak olacak metotları belirtmeye olanak tanırken, öte yandan türetilmiş sınıflara da bu metotların bir kısmının ya da tümünün spesifik uygulamalarını tanımlamalarına imkan verir. Devre dışı bırakılan metotlar, C#'ın "tek arayüz, çok metot" çok biçimlilik özelliğini uygulamanın bir başka yoludur.
Çok biçimliliği başarıyla uygulamanın anahtarı bir ölçüde, temel ve türetilmiş sınıfların hiyerarşi içinde daha az uzmanlık alanından daha yoğun uzmanlık alanına doğru ilerlediğini kavramaktır. Doğru kullanıldığında bir temel sınıf, türetilmiş sınıfın direkt olarak kullanabileceği öğelerin tümünü sağlar. Ayrıca, türetilmiş sınıfın kendi başına uygulaması gereken metotları da tanımlar. Bu, türetilmiş sınıfa kendi metotlarını tanımlama esnekliği sunarken, aynı zamanda tutarlı bir arayüzü de mecbur kılmayı sürdürür. Böylece, kalıtımı devre dışı bırakılan metotlarla birleştirerek bir temel sınıf, tüm türetilmiş sınıfları tarafından kullanılacak olan metotların genel yapısını tanımlayabilir.
Kaynak: Herbert Schildt
Herkes için C#
Çok biçimliliği başarıyla uygulamanın anahtarı bir ölçüde, temel ve türetilmiş sınıfların hiyerarşi içinde daha az uzmanlık alanından daha yoğun uzmanlık alanına doğru ilerlediğini kavramaktır. Doğru kullanıldığında bir temel sınıf, türetilmiş sınıfın direkt olarak kullanabileceği öğelerin tümünü sağlar. Ayrıca, türetilmiş sınıfın kendi başına uygulaması gereken metotları da tanımlar. Bu, türetilmiş sınıfa kendi metotlarını tanımlama esnekliği sunarken, aynı zamanda tutarlı bir arayüzü de mecbur kılmayı sürdürür. Böylece, kalıtımı devre dışı bırakılan metotlarla birleştirerek bir temel sınıf, tüm türetilmiş sınıfları tarafından kullanılacak olan metotların genel yapısını tanımlayabilir.
Kaynak: Herbert Schildt
Herkes için C#
Kaydol:
Kayıtlar (Atom)