Aybars Arslan

Console.WriteLine("Hello World");

Polymorphism – Çok Biçimlilik

Bu yazıda polymorphism – çok biçimlilik hakkında karalama yapacağız.  Çok biçimlilik isminden de anlayacağımız gibi base tarafından oluşturulan metodların istenildiği takdir de farklı biçimlerde çalışmasıdır. Polymorphism static ve dynamic olmak üzere ikiye ayrılır.

Static Polymorphism : Compile time içerisinde metodun vereceği yanıt belirliyse.

Dynamic Polymorphism : Metodun vereceği yanıt run-time sürecinde belli oluyorsa.

Static Polymorhipsm

Merhod Overloading olarakta açıklanabilir. Bir metodun farklı paremetreler ile vereceği cevapların ihtiyaca göre çeşitlendirilmesidir. Örnekle daha güzel anlayacağız. Aklıma baya amaçsız ancak anlamlı bir örnek geldi;

    
    public class Variable
    {
        void What(int i)
        {
            Console.WriteLine("It's : {0}", i.GetType());
        }

        void What(double f)
        {
            Console.WriteLine("It's : {0}", f.GetType());
        }

        void What(string s)
        {
            Console.WriteLine("It's : {0}", s.GetType());
        }

        static void Main(string[] args)
        {
            Variable p = new Variable();

            // Call what for int
            p.What(5);

            // Call what for float
            p.What(500.263);

            // Call what for string
            p.What("Hello C#");
            Console.ReadKey();
        }
    }

Dynamic Polymorhipsm

Sıra geldi işin daha zevkli kısmı olan Dynamic Polymorhipsme,

abstract class veya virtual functionlar yardımıyla dynamic polymorhism yapılabilir.

Bir sınıf Abstract bir sınıftan miras alınıyorsa ve  bu classta abstarct methodlar var ise ezilmek(tam doğru  kelime olmayabilir.) yani metodun içeriği yazılmak zorundadır. MUST!

    
    abstract class Base
    {
        public abstract string Must();
    }

    class Me : Base
    {
        public override string Must()
        {
            return ("Abstract classtan alınan abstarct metodu overload etmek zorundayım.");
        }

        static void Main(string[] args)
        {
            Me me = new Me();
            string str = me.Must();
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }

 

Bir sınıf yine başka bir sınıftan miras alınmış ve miras alınan sınıfta virtual metodlar varsa bu metodlar yeni sınıfımız için yeterli değilse ezilerek override edilebilir. MAY or MAY NOT BE GOOD!

En harika ve son örneğimiz 🙂

    
    public class DriveObj
    {
        public virtual void Drive()
        {
            Console.WriteLine("I'm generic drive");
        }
    }

    public class Car : DriveObj
    {
        public override void Drive()
        {
            Console.WriteLine("I'm driving Car");
        }
    }

    public class Truck : DriveObj
    {
        public override void Drive()
        {
            Console.WriteLine("I'm driving Truck");
        }
    }

    public class Bike : DriveObj
    {
        public override void Drive()
        {
            Console.WriteLine("I'm driving Bike");
        }
    }

    public class Demo
    {
        public static void Main()
        {
            DriveObj[] driveObjs = new DriveObj[4];

            driveObjs[0] = new Car();
            driveObjs[1] = new Truck();
            driveObjs[2] = new Bike();
            driveObjs[3] = new DriveObj();

            // dynamically
            foreach (var driveObj in driveObjs)
            {
                driveObj.Drive();
            }

            Console.ReadKey();
        }
    }

Yeni yazıda görüşmek üzere.

Paylaş !

, , , ,

Bir Cevap Yazın

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