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();
}
}
}

ในตัวอย่างนั้น เป็นตัวอย่างหนึ่งของ 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 เป็นต้น


บทความเกี่ยวกับ Polymorphism

Polymorphism ในภาษา Java

ในบทเรียน คุณจะได้เรียนรู้เกี่ยวกับคุณสมบัติ Polymorphism ในภาษา Java Polymorphism คือการที่ออบเจ็คสามารถมีได้หลายรูปแบบ ซึ่งเกิดจากการสืบทอดจาก super class และ...

Polymorphism ในภาษา Visual Basic

Polymorphism เป็นคุณสมบัติที่สำคัญเป็นอันดับที่สามในการเขียนโปรแกรมเชิงวัตถุ ต่อจากคุณสมบัติการห่อหุ่มและการสืบทอด คำว่า Polymorphism นั้นเป็นคำศัพท์ที่มาจากภาษ...