Son Haberler
Anasayfa / Yazılım / C# / Virtual Methods – Sanal Metotlar

Virtual Methods – Sanal Metotlar

Virtual methods (sanal metotlar), base class (temel sınıf) içinde bildirilmiş ve derived class (türemiş sınıf) içinde de tekrar bildirilebilen metotlardır. Böylelikle sanal metotlar kullanılarak nesne yönelimli programlama da çok sık başvurulan çok biçimliliği yani poliformizm (polimorphizm) uygulanmış olur. Yani temel sınıfta bir sanal metot bildirildiğinde bu temel sınıftan türeyen sınıflardaki metotlar override edilerek, temel sınıftaki sanal metotu devre dışı bırakabilirler.

Sanal metotları bildirmek için virtual anahtar sözcüğü kullanılır. Bu anahtar sözcükle, sanal metotumuz bildirilmiş olur. Türeyen sınıfta ise, temel sınıftaki sanal metotları devre dışı bırakmak için override anahtar sözcüğü kullanılır. Yani base class?da virtual olarak tanımladığım bir metotu derived class içindeoverride edebilirim. Eğer override edersem derived class içindeki metot çalışır, eğer etmez isem direkt olarak base class içindeki virtual metot çalışır.

Virtual metotlar private olarak tanımlanamazlar, public olmak zorundadırlar. Zaten private olmasının bir anlamı yok çünkü aksi halde derived class içinde bunları override edemeyiz. Public olmasının yanı sıra protected, internal şeklinde de bildirilebilirler.

Şimdi bu anlatılanları bir örnekle destekleyelim:

Ekrana bunun sonucunda;

Para Yatırma Temel işlemi yapılacak
Havale ile para yatırma işlemleri yapılacak
EFT ile para yatırma işlemleri yapılacak

Yazılır.. Peki ben türemiş sınıflarda bu metotu override etmez isem sonuç ne olur. Bir de bu duruma bakalım, EFT türemiş sınıfında metotumu override etmiyorum.

Bunun sonucunda ekrana :

Para Yatırma Temel işlemi yapılacak
Havale ile para yatırma işlemleri yapılacak
Para Yatırma Temel işlemi yapılacak

Yazılacaktır.

Bu örnek ile anladığımız gibi örneğin temel işlemleri yapan bir base classımız olur, içinde sanal metotumuz olur ve birde duruma göre özel işlemlerin yapılmasını gerektiren türeyen sınıflar içinde bu metotun override edilmiş durumu olur. Örneğin bu para yatırma işlemi havale için X bankasının Y serverine giderken, EFT için Y bankasının Z serverine gidebilir, bu alt türeyen sınıflarda buna göre kodlarımız da düzenleme vs yapılabilir.

Bu örnekden anlaşılacağı üzere tek bir metot ile bir çok sınıfa ait farklı özellikteki metotlar çağırılabilmektedir. Bu işlemler aynı nesne üzerinden yapılabilmektedir işte bir nesnenin bu şekilde çoklu özellik göstermesine çok biçimlilik-çok şekillilik (polimorphizm) denilmektedir.

Tüm bunları şöyle bir özetlersek ;

? Sanal metot belirtmek için virtual anahtar sözcüğü kullanılır.
? Türeyen sınıf içinde temel sınıftaki sanal metodu devre dışı bırakmak için override anahtar sözcüğü kullanılır.
? Türeyen sınıf içinde devre dışı bırakan metotlar, temel sınıftaki devre dışı bırakılacak sanal metot ile aynı isme sahip olmalıdır.
? Eğer metot sanal olarak bildirilmemiş ise, derleyici derleme zamanında hangi metotun çağırılacağını nesnelerin tür bilgisinden faydalanarak çağırır.
? Eğer metot sanal olarak bildirilmiş ise, derleyici derleme aşamasında ürettiği kod ile çalışma zamanında referansın türüne göre ilgili sınıfın devre dışı bırakılmış metotunu çağırır.
? Hangi metotun çağırılacağının çalışma zamanında belirlenmesi late binding (geç bağlama) olarak adlandırılır.
? Türeyen sınıfta devre dışı bırakan metotların parametrik yapısı temel sınıftaki sanal metotun parametrik yapısı ile aynı olmalıdır.
? Statik metotları virtual olarak nitelendiremeyiz.
? Türeyen sınıflar, temel sınıftaki metotları devre dışı bırakmak zorunda değildir, böyle bir durumda temel sınıfın referansları üzerinden temel sınıfa ait olan metot çalışacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir