C# Virtual ve Override Kullanımı
C#.Net sever yazılımcılara selamlar olsun :)
Nesne yönelimli programlama (OOP) konusuyla ilerlediğimiz bugünlerde bugünkü konumuz virtual ve override konularını öğrenmek olacak.
Virtual - override konuları aslında metotlar konusu ile birbirlerine sıkı sıkıya bağlı iki konudur ve doğrudan doğruya kalıtım (inheritance) konusu içerisinde yer alırlar.
Öncelikle virtual anahtar kelimesini inceleyelim; virtual sözcüğü Türkçe'ye çevrildiğinde "sanal" anlamına gelmektedir ve bir sınıfın metodunu sanallaştırarak daha sonra o sınıftan alınacak kalıtım ile metodun içeriğinde değişiklikler yapılarak yeniden kullanılmasına izin verir.
Override sözcüğü ise tam olarak Türkçe'ye çevirilemesinde bazı programcılar "ezmek,büzmek" anlamında
kafalarına kazısalarda siz bunu "bir metodu daha sonra yeniden yapılandırmak" olarak aklınızda tutarsanız daha rahat şekilde anlayabilirsiniz.Yani; virtual olarak belirtilen bir metot, içerisinde bulunduğu sınıfın kalıtım vermesiyle override edilerek yapacağı işi değiştirilebilir.
Buraya kadar kafanızda birşeyler canlanmıyorsa sorun yok,şimdi daha rahat anlayacağınız örnekler yapacağız :)
Visual Studio'yu açalım ve C# programlama dilinde yeni bir Windows Form projesi oluşturduktan sonra "Hesaplamalar" isimli bir sınıf oluşturalım:
Bu sınıfın içerisine "Hesapla" adında virtual bir metot yazalım ve bizden iki sayı istesin ve geriye ondalık sayılar döndürmesi için double değişken değeri döndürtelim:
Hesaplamalar isimli sınıf henüz bir anlam ifade etmediği için hesapla metodunun içerisini boş bıraktık ve herhangi bir matematiksel işlem yaptırmadan sıfır döndürsün istedik,buradaki amacımız bu sınıfın kalıtım verdikten sonra bu metodu yeniden yapılandırmak olacak.
Şimdi bu metodumuzu test edebilmek için formumuza bir buton ve 2 textbox ekliyoruz:
Kullanıcı 2 sayı girecek ve metodumuz girilen sayılara göre hareket edecek,o yüzden kullanıcının butona tıklaması gerektiği için butonumuzun click eventine geçiyor ve "Hesaplamalar" sınıfımızdan instance (örnek kopya) alıyor ve MessageBox.Show() ile sınıfımızın döndüreceği sayısal değeri ekranda göstereceğiz.
Bu uzun cümleden sonra kodlarımızı yazıyoruz:
Programımızı çalıştırıyoruz:
Sıra geldik "Topla" isimli bir sınıf yaratmaya,bu sınıfımız "Hesaplamalar" sınıfından kalıtım alsın:
Aldığımız bu kalıtım sayesinde Topla isimli sınıfımız hesapla metodunu da devralmış oldu,yani üst sınıftaki metodu bu sınıftada kullabiliyoruz ancak hesaplamalar sınıfındaki hesapla metodumuz hiçbir işlem yapmadan sıfır döndürdüğü için burada iki sayıyı toplamasını istiyoruz.
Bunun için metodumuzun adını ve parametrelerini bire bir aynı yazıyor ve override sözcüğünü yanına ekliyoruz:
Bu sayede hesaplamalar üst sınıfındaki metodun içeriğini değiştirmiş olduk ve kendisine toplama fonksiyonu vermiş
olduk.Şimdi bu topla sınıfımızdan form üzerinde instance alarak yeniden kullanalım:
Gördüğünüz gibi hesaplamalar sınıfındaki hesapla metodu sıfır döndürürken aynı metodu kalıtım alan topla sınıfında
yeniden yapılandırarak toplama yapmasını sağladık,işte bu olaya metotların kalıtım alarak yeniden yapılandırılması ya da
bazı yazılımcıların dediği gibi ezilmesi deniyor :)
Buraya kadar anladığınızı umarak şimdi de çarpma işlemi için aynı konuyu işleyelim; öncelikle "Carp" isimli bir sınıf
oluşturuyor ve yine Hesaplamalar isimli sınıfımızdan kalıtım alıyoruz:
Hesaplamalar sınıfındaki virtual olarak işaretli hesapla metodumuzu yine aynı biçimde yazıyor ve override olarak
etiketliyoruz:
Carp isimli sınıftan örnek kopya alarak yeniden metodumuzu çağırıyoruz:
Virtual ve override konusunda dikkat etmemiz gereken iki nokta var; birincisi bir metodun kalıtım alınarak yeniden yapılandırılabilmesi için adının,dönüş tipinin (int,string gibi) ve parametrelerinin bire bir aynı olması gerekmektedir.
Bir diğer dikkat etmemiz gereken ise daha sonra override edilmeyecek metotlarımızı gereksiz yere virtual ile sanallaştırarak performans düşüşü yaşayabileceğimizi göz önünde bulundurmalıyız.Yani yok yere virtual işaretleme yapmamalıyız.
C# virtual - override konularını öğrendiğimize göre böylece makalemizin sonuna gelmiş bulunuyoruz,umarım yazılarımı beğenir ve faydalı oluyorlardır.
Bir sonraki makalemizde görüşmek üzere hoşçakalın :)
Nesne yönelimli programlama (OOP) konusuyla ilerlediğimiz bugünlerde bugünkü konumuz virtual ve override konularını öğrenmek olacak.
Virtual - override konuları aslında metotlar konusu ile birbirlerine sıkı sıkıya bağlı iki konudur ve doğrudan doğruya kalıtım (inheritance) konusu içerisinde yer alırlar.
Öncelikle virtual anahtar kelimesini inceleyelim; virtual sözcüğü Türkçe'ye çevrildiğinde "sanal" anlamına gelmektedir ve bir sınıfın metodunu sanallaştırarak daha sonra o sınıftan alınacak kalıtım ile metodun içeriğinde değişiklikler yapılarak yeniden kullanılmasına izin verir.
Override sözcüğü ise tam olarak Türkçe'ye çevirilemesinde bazı programcılar "ezmek,büzmek" anlamında
kafalarına kazısalarda siz bunu "bir metodu daha sonra yeniden yapılandırmak" olarak aklınızda tutarsanız daha rahat şekilde anlayabilirsiniz.Yani; virtual olarak belirtilen bir metot, içerisinde bulunduğu sınıfın kalıtım vermesiyle override edilerek yapacağı işi değiştirilebilir.
Buraya kadar kafanızda birşeyler canlanmıyorsa sorun yok,şimdi daha rahat anlayacağınız örnekler yapacağız :)
Visual Studio'yu açalım ve C# programlama dilinde yeni bir Windows Form projesi oluşturduktan sonra "Hesaplamalar" isimli bir sınıf oluşturalım:
Bu sınıfın içerisine "Hesapla" adında virtual bir metot yazalım ve bizden iki sayı istesin ve geriye ondalık sayılar döndürmesi için double değişken değeri döndürtelim:
Hesaplamalar isimli sınıf henüz bir anlam ifade etmediği için hesapla metodunun içerisini boş bıraktık ve herhangi bir matematiksel işlem yaptırmadan sıfır döndürsün istedik,buradaki amacımız bu sınıfın kalıtım verdikten sonra bu metodu yeniden yapılandırmak olacak.
Şimdi bu metodumuzu test edebilmek için formumuza bir buton ve 2 textbox ekliyoruz:
Kullanıcı 2 sayı girecek ve metodumuz girilen sayılara göre hareket edecek,o yüzden kullanıcının butona tıklaması gerektiği için butonumuzun click eventine geçiyor ve "Hesaplamalar" sınıfımızdan instance (örnek kopya) alıyor ve MessageBox.Show() ile sınıfımızın döndüreceği sayısal değeri ekranda göstereceğiz.
Bu uzun cümleden sonra kodlarımızı yazıyoruz:
Programımızı çalıştırıyoruz:
Sıra geldik "Topla" isimli bir sınıf yaratmaya,bu sınıfımız "Hesaplamalar" sınıfından kalıtım alsın:
Aldığımız bu kalıtım sayesinde Topla isimli sınıfımız hesapla metodunu da devralmış oldu,yani üst sınıftaki metodu bu sınıftada kullabiliyoruz ancak hesaplamalar sınıfındaki hesapla metodumuz hiçbir işlem yapmadan sıfır döndürdüğü için burada iki sayıyı toplamasını istiyoruz.
Bunun için metodumuzun adını ve parametrelerini bire bir aynı yazıyor ve override sözcüğünü yanına ekliyoruz:
Bu sayede hesaplamalar üst sınıfındaki metodun içeriğini değiştirmiş olduk ve kendisine toplama fonksiyonu vermiş
olduk.Şimdi bu topla sınıfımızdan form üzerinde instance alarak yeniden kullanalım:
Gördüğünüz gibi hesaplamalar sınıfındaki hesapla metodu sıfır döndürürken aynı metodu kalıtım alan topla sınıfında
yeniden yapılandırarak toplama yapmasını sağladık,işte bu olaya metotların kalıtım alarak yeniden yapılandırılması ya da
bazı yazılımcıların dediği gibi ezilmesi deniyor :)
Buraya kadar anladığınızı umarak şimdi de çarpma işlemi için aynı konuyu işleyelim; öncelikle "Carp" isimli bir sınıf
oluşturuyor ve yine Hesaplamalar isimli sınıfımızdan kalıtım alıyoruz:
Hesaplamalar sınıfındaki virtual olarak işaretli hesapla metodumuzu yine aynı biçimde yazıyor ve override olarak
etiketliyoruz:
Carp isimli sınıftan örnek kopya alarak yeniden metodumuzu çağırıyoruz:
Virtual ve override konusunda dikkat etmemiz gereken iki nokta var; birincisi bir metodun kalıtım alınarak yeniden yapılandırılabilmesi için adının,dönüş tipinin (int,string gibi) ve parametrelerinin bire bir aynı olması gerekmektedir.
Bir diğer dikkat etmemiz gereken ise daha sonra override edilmeyecek metotlarımızı gereksiz yere virtual ile sanallaştırarak performans düşüşü yaşayabileceğimizi göz önünde bulundurmalıyız.Yani yok yere virtual işaretleme yapmamalıyız.
C# virtual - override konularını öğrendiğimize göre böylece makalemizin sonuna gelmiş bulunuyoruz,umarım yazılarımı beğenir ve faydalı oluyorlardır.
Bir sonraki makalemizde görüşmek üzere hoşçakalın :)
İyi bir calisma yeni baslayanlar icin tesekkur ederim