Polimorfizm Yunanca'da birçok şekil anlamında kullanılmaktadır. Yazılım dilinde ise bir nesnenin başka bir nesneymiş gibi davranabilmesine polimorfizm deniyor. Polimorfizm başlığı altnda inceleyeceğimiz birkaç detay var.
Virtual and Override Keywordleri
Ancak bazen A classında tanımlanmış olan bu metod yetersiz kalabilir ve buna bizim ekleyeceğimiz ekstra işlemler olabilir. Bu durumda A classında tanımlanmış olan bu metodu B classında override etmek durumundayız. Aşağıdaki kodu inceleyecek olursak:
Burada A classındaki metodu B classında override edebilmemiz için, A classındaki metodun başına virtual keywordünü eklememiz gerekmektedir. B classında da A classında yazdığımız metodu ezmek için başına override keywordünü ekliyoruz. Sonuç olarak her class kendi instance'ı içerisinde tanımlanmış metodun içerisindeki işlemlere ait çıktıyı alacaktır.
Metod Gizleme (Metod Hiding)
Eğer yukarıdaki gibi A classının instance'ını aldığımızda A classı içerisindeki Foo metodunun çalışmasını istiyorsak, B classının içindeki Foo metodunu tanımlarken override değil new keywordünü kullanmamız gerekir. Aşağıdaki kod bloğundan bu kullanımı görebilirsiniz:
Yazıyı Oku
using System;
namespace Polymorphism
{
class A
{
public void Foo() { Console.WriteLine("A::Foo()"); }
}
class B : A {}
class Test
{
static void Main(string[] args)
{
A a = new A();
a.Foo(); // çıktı --> "A::Foo()"
B b = new B();
b.Foo(); // çıktı--> "A::Foo()"
}
}
}
Yukardaki kod bloğunu incelediğimizde Bir A classı ve bu classtan türemiş bir B classı görmekteyiz. A classı kendi içerisinde Foo adlı bir metod içermekte ve bu metod ekrana bir yazı bastırıyor. B classı da A classından türediği için, A classı içerisinde tanımlanmış olan Foo metodunu çağırıp kullanabilir. Ekran çıktılarını kod içerisinden de görebiliriz.Virtual and Override Keywordleri
Ancak bazen A classında tanımlanmış olan bu metod yetersiz kalabilir ve buna bizim ekleyeceğimiz ekstra işlemler olabilir. Bu durumda A classında tanımlanmış olan bu metodu B classında override etmek durumundayız. Aşağıdaki kodu inceleyecek olursak:
using System; namespace Polymorphism { class A { public virtual void Foo() { Console.WriteLine("A::Foo()"); } } class B : A { public override void Foo() { Console.WriteLine("B::Foo()"); } } class Test { static void Main(string[] args) { A a; B b; a = new A(); b = new B(); a.Foo(); // çıktı--> "A::Foo()" b.Foo(); // çıktı--> "B::Foo()" a = new B(); a.Foo(); // çıktı--> "B::Foo()" } } }
Burada A classındaki metodu B classında override edebilmemiz için, A classındaki metodun başına virtual keywordünü eklememiz gerekmektedir. B classında da A classında yazdığımız metodu ezmek için başına override keywordünü ekliyoruz. Sonuç olarak her class kendi instance'ı içerisinde tanımlanmış metodun içerisindeki işlemlere ait çıktıyı alacaktır.
A a = new B();
a.Foo(); // çıktı--> "B::Foo()"
Ancak yukarıdaki gibi A classının instanceını alırsak, çıktımız B classı içerisinde override etmiş olduğumuz metodun içerisindeki işlemler sonucu elde edilen çıktı olacaktır.Metod Gizleme (Metod Hiding)
Eğer yukarıdaki gibi A classının instance'ını aldığımızda A classı içerisindeki Foo metodunun çalışmasını istiyorsak, B classının içindeki Foo metodunu tanımlarken override değil new keywordünü kullanmamız gerekir. Aşağıdaki kod bloğundan bu kullanımı görebilirsiniz: