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#
türetilmiş sınıf etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
türetilmiş sınıf etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Sanal Metotlar ve Devre Dışı Bırakma (Overriding) [11]
Sanal metot, temel sınıf içerisinde virtual olarak deklare edilen ve bir veya daha fazla türetilmiş sınıf içinde yeniden tanımlanan bir metotdur. Böylece, her türetilmiş sınıf bir sanal metodun kendine özgü bir versiyonuna sahip olabilir. Sanal metotlardan biri bir temel referansı tarafından çağrıldığında ortaya çıkan durum ilginçtir. Bu durumda, referans tarafından referansta bulunulan nesnenin tipine bağlı olarak c#, söz konusu metodun hangi versiyonunun çağrılacağını belirler ve bu belirleme çalışma zamanında gerçekleştirilir.
Yani, farklı nesnelere referansta bulunuluyorsa sanal metodun farklı versiyonları çalıştırılır. Bir başka deyişle, sanal metodun hangi versiyonunun çalıştırılacağını belirleyen referansta bulunan nesnenin tipidir. (referansın tipi değildir.) Dolayısıyla, eğer bir temel sınıf bir sanal metot içeriyorsa ve bu temel sınıftan başka sınıflar turetilmişse, bu durumda bir temel sınıf referansı aracılığıyla farklı nesne tiplerine referansta bulunulurken sanal metodun farklı versiyonları çalıştırılır.
Yani, farklı nesnelere referansta bulunuluyorsa sanal metodun farklı versiyonları çalıştırılır. Bir başka deyişle, sanal metodun hangi versiyonunun çalıştırılacağını belirleyen referansta bulunan nesnenin tipidir. (referansın tipi değildir.) Dolayısıyla, eğer bir temel sınıf bir sanal metot içeriyorsa ve bu temel sınıftan başka sınıflar turetilmişse, bu durumda bir temel sınıf referansı aracılığıyla farklı nesne tiplerine referansta bulunulurken sanal metodun farklı versiyonları çalıştırılır.
Temel Sınıf Referansları ve Türetilmiş Nesneler [10]
Bildiğiniz gibi, C# veri tiplerine sıkı sıkıya bağlı bir dildir. Standart dönüşümler ve basit tiplere uygulanan otomatik terfiler bir yana, tip uyumluluğu kesinlikle zorlanır. Bu yüzden, bir sınıf tipindeki bir referans değişkeni normalde bir başka sınıf tipindeki nesneye referans bulunamaz. Örneğin, aşağıdaki programı ele alın:
// Bu program calismayacaktir.
class X {
int a;
public X(int i){ a=i; }
}
class Y {
int a;
public Y(int i) { a=i; }
}
class IncompatibleRef {
public static void Main() {
X x=new X(10);
X x2;
Y y=new Y(5);
x2=x; // OK, her ikiside ayni tipte
x2=y; // Hata, ayni tipte degiller
}
}
// Bu program calismayacaktir.
class X {
int a;
public X(int i){ a=i; }
}
class Y {
int a;
public Y(int i) { a=i; }
}
class IncompatibleRef {
public static void Main() {
X x=new X(10);
X x2;
Y y=new Y(5);
x2=x; // OK, her ikiside ayni tipte
x2=y; // Hata, ayni tipte degiller
}
}
Temel Sınıfın Yapılandırıcılarını Çağırmak 2 [5]
Temel sınıf tarafından tanımlanan herhangi bir yapılandırıcı base tarafından çağrılabilir. Çalıştırılacak olan yapılandırıcı, argümanları eşleyen yapılandırıcı olacaktır. Örneğin, işte size TwoDShape ve Triangle'in genişletilmiş versiyonu. Aşağıdaki örnekte TwoDShape ve Triangle, hem varsayılan hem de tek atgümanlı yapılandırıcı içerirler.
Kaydol:
Kayıtlar (Atom)