Inheritance

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

Inheritance คืออะไร

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

ในการสืบทอดในภาษา C# นั้นจะใช้เครื่องหมายโคลอน (colon) : โดยมีรูปแบบการสร้างคลาสเพื่อสืบทอดดังนี้

class ClassA: ClassB {
// statemets
}

จากรูปแบบด้านบนนั้นเป็นวิธีของการเขียนโปรแกรม โดยมีความหมายว่า ClassA สืบทอดคุณสมบัติทั้งหมดไปยัง ClassB ในตอนนี้ ClassB มีคุณสมบัติเท่ากับ ClassA และนอกจากนี้มันยังสามารถเพิ่มสมาชิกไม่ว่าจะเป็นตัวแปรหรือเมธอดได้ ดังนั้นคลาสลูกจะมีคุณสมบัติหรือประสิทธิภาพเท่ากับหรือมากกว่าคลาสแม่เสมอ แต่มีบางอย่างที่คลาสไม่สามารถสืบทอดได้นั้นคือ Constructor และ Destructor

ต่อไปมาดูตัวอย่างของการ Inheritance ในภาษา C#

สร้าง Inheritance คลาส

ในการแสดงตัวอย่างนี้ เราจะใช้ตัวอย่างคลาสของบทก่อนหน้า นั่นคือคลาส Square และเราได้เขียนโค้ดเพิ่มเติมสำหรับการสืบทอดดังนี้

using System;

class InheritanceExample
{
static void Main(string[] args)
{
Cube a = new Cube(3, 4, 5);
Cube b = new Cube(10, 10, 5);

a.name = "Jupiter";
b.name = "Mars";

Console.WriteLine(a.name + " has area = " + a.CalculateArea());
Console.WriteLine(a.name + " has volume = " + a.CalculateVolume());

Console.WriteLine(b.name + " has area = " + b.CalculateArea());
Console.WriteLine(b.name + " has volume = " + b.CalculateVolume());
}
}

class Square
{
public string name;
protected int width;
protected int height;

public void SetDimension(int w, int h)
{
width = w;
height = h;
}
public int CalculateArea()
{
return width * height;
}
}

class Cube : Square {

protected int dept;

public Cube (int w, int h, int d) {
width = w;
height = h;
dept = d;
}

public int CalculateVolume()
{
return width * height * dept;
}

}

จากตัวอย่างด้านบน เราได้สร้างคลาส Cube ซึ่งสืบทอดมาจากคลาส Square ในบทก่อนหน้า เราเพิ่มคุณสมบัติให้กับคลาส Cube เพื่อให้มันมีความสามารถเพิ่มมากขึ้น คือเก็บข้อมูลในสามมิติได้ และนอกจากนี้คลาส Cube ยังสามารถใช้คุณสมบัติอื่นๆ ที่คลาส Square มี เช่น การคำนวณหาขนาด

ในส่วนของฟังก์ชัน Main เราได้ทำการสร้างออบเจ็คจากคลาส Cube ขึ้นมาสองออบเจ็ค และจะสังเกตุว่าเรายังสามารถที่จะใช้ตัวแปร name และเมธอดได้

Note: คุณสมบัติที่เป็นแบบ private จะไม่สามารถถ่ายทอดได้ เราจำเป็นต้องเปลี่ยนตัวแปร width และ height เป็น protected ก่อน

จากโปรแกรมด้านบน จะได้ผลลัพธ์ดังข้างล่าง

Jupiter has area = 12
Jupiter has volume = 60
Mars has area = 100
Mars has volume = 500

Overriding Base Class

ในการสืบทอดนั้น ยังมีความสามารถที่เราสามารถทำการ Override หรือเขียนทับได้ จากตัวอย่างด้านล่าง เราได้ทำการกำหนดการทำงานให้กับเมธอด CalculateArea ใหม่ เมื่อมีการเรียกใช้งาน การทำงานของคลาสแม่ก็จะถูกซ่อน และใช้จากคลาสใหม่แทน เรายังสามารถเรียกใช้ CalculateArea จากคลาส Square ได้เช่นเดิมโดยการเรียกผ่านคำสั่ง base ดังตัวอย่างข้างล่าง

class Cube : Square {

protected int dept;

public Cube (int w, int h, int d) {
width = w;
height = h;
dept = d;
}

public int CalculateVolume()
{
return width * height * dept;
}

public int CalculateArea() // overriding
{
return 0;
}
public int SuperCalculateArea()
{
return base.CalculateArea(); // call super class's method
}


}

ในบทนี้คุณได้เรียนรู้เกี่ยกวับคุณสมบัติ Inheritance (การสืบทอด) ในการเขียนโปรแกรมเชิงวัตถุที่มีในภาษา C# และการ Override และการใช้คำสั่ง base ในการเข้าถึง super class ของมัน


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

Inheritance ในภาษา Java

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ Inheritance (การสืบทอด) ในภาษา Java ซึ่งเป็นคุณสมบัติที่สำคัญในการเขียนโปรแกรมเชิงวัตถุ Inheritance เป็นคุณสมบัติในการเขียนโป...

Inheritance ในภาษา Visual Basic

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

Inheritance ในภาษา PHP ในภาษา PHP

Inheritance คือคุณสมบัติการสืบทอดในการเขียนโปรแกรมเชิงวัตถุ โดยที่คลาสสามารถสืบทอดคุณสมบัติ (Property) หรือตัวแปรและเมธอด (Method) มาจากคลาสหลัก (Parent class) ...