วันพุธที่ 17 สิงหาคม พ.ศ. 2559

Polymorphism

ในบทนี้คุณจะได้รู้จักกับคุณสมบัติ Polymorphism ในภาษา C# ซึ่งมันเป็นคุณสมบัติที่สำคัญอย่างหนึ่งในการเขียนโปรแกรมเชิงวัตถุที่รองลง มาจาก Inheritance และ Encapsulation

Polymorphism คืออะไร

Polymorphism นั้นคือการมีได้หลายรูปแบบ โดยมันเป็นคำที่ถูกใช้ในการเขียนโปรแกรมเชิงวัตถุ ที่จะใช้ในการสร้างคลาสลูก (Derived class) โดยทำการ Override กับ Virtual เมธอดของคลาสหลัก (Base class) และเราสามารถสั่งการทำงานเมธอดในคลาสหลักและได้ผลลัพธ์การทำงานของคลาสลูก แทน
มาดูตัวอย่างสำหรับ Polymorphism ในภาษา C# ยกตัวอย่างเช่น เรามีคลาสของสัตว์ ซึ่งสัตว์แต่ละชนิดนั้นสามารถที่จะเคลื่อนที่ได้ แต่วิธีการเคลื่อนของมันแตกต่างกัน
using System;

namespace Polymorphism
{
    class Animals
    {
        public string name;
        public int height;
        public int weight;

        public virtual void Move()
        {
            Console.WriteLine("Perform base class move");
        }
    }

    class Dog : Animals {
        public override void Move()
        {
            Console.WriteLine("Running on the ground");
        }

    }

    class Fish : Animals
    {
        public override void Move()
        {
            Console.WriteLine("Swimming in the water");
        }
    }

    class Bird : Animals
    {
        public override void Move()
        {
            Console.WriteLine("Frying in the air");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Animals dog = new Dog();
            Animals fish = new Fish();
            Animals bird = new Bird();

            dog.Move();
            fish.Move();
            bird.Move();

            Console.ReadKey();
        }
    }
}
ใน ตัวอย่างนั้น เป็นตัวอย่างหนึ่งของ Polymorphism นั่นคือสร้างตัวแปรคลาสโดยการใช้ Base class ของมัน สำหรับ Constructor นั้นจะเป็นของ Delivered class เอง เช่นในคำสั่ง Animals dog = new Dog() ซึ่งถ้าเป็นในคุณสมบัติของการสืบทอดนั้นจะเป็น Dog dog = new Dog() ซึ่งตรงนี้เองทำให้มันแตกต่างไป ซึ่งจะทำให้มันสามารถนำไปใช้ง่าย เช่น เก็บในข้อมูลชนิดเดียวกัน เช่น เก็บในอาเรย์ Generic หรือส่งไปยังเมธอด
ต่อไปมาดูตัวอย่างเพิ่มเกี่ยวกับการใช้ประโยชน์จาก Polymorphism
using System;
using System.Collections.Generic;

namespace Polymorphism
{
    class Animals
    {
        public string name;
        public int height;
        public int weight;

        public virtual void Move()
        {
            Console.WriteLine("Perform base class move");
        }
    }

    class Dog : Animals {
        public override void Move()
        {
            Console.WriteLine("Running on the ground");
        }

    }

    class Fish : Animals
    {
        public override void Move()
        {
            Console.WriteLine("Swimming in the water");
        }
    }

    class Bird : Animals
    {
        public override void Move()
        {
            Console.WriteLine("Frying in the air");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // arrays
            Animals[] arr = new Animals[3];
            arr[0] = new Dog();
            arr[1] = new Fish();
            arr[2] = new Bird();

            Console.WriteLine("C# Arrays:");
            foreach (Animals a in arr)
            {
                AnimalMove(a);
            }

            // Generic
            List<Animals> gener = new List<Animals>();
            gener.Add(new Dog());
            gener.Add(new Fish());
            gener.Add(new Bird());

            Console.WriteLine("\nC# Generic:");
            foreach (Animals a in gener)
            {
                AnimalMove(a);
            }

            Console.ReadKey();
        }

        public static void AnimalMove (Animals a) {
            a.Move();
        }
    }
}
ใน ตัวอย่าง เป็นการให้เห็นว่าเราสามารถเก็บข้อมูลได้แบบไดนามิกส์ โดยไม่ต้องสนใจว่าจะสร้างมาจากคลาสไหน โดยเราได้ใช้คลาสแม่ในการประกาศตัวแปร และในการใช้งานฟังก์ชันนั้น เราสามารถส่งตัวแปรจากคลาสใดๆ ที่สืบทอดมาจากคลาส Animal ได้
C# Arrays:
Running on the ground
Swimming in the water
Frying in the air

C# Generic:
Running on the ground
Swimming in the water
Frying in the air
และนี่เป็นผลลัพธ์ของตัวอย่างที่สอง
ใน บทนี้ คุณได้เรียนรู้และการใช้งานเกี่ยวกับ Polymorphism ในภาษา C# ซึ่งมันมีประโยชน์หลายอย่างและทำให้ง่ายขึ้น นอกจากนี้ ยังมี Polymorphism แบบอื่นอีก เช่น Method Overloading หรือ Operators Overloading เป็นต้น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...