ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ Inheritance (การสืบทอด) ในภาษา C# ซึ่งเป็นคุณสมบัติที่สำคัญในการเขียนโปรแกรมเชิงวัตถุ
ในการสืบทอดในภาษา C# นั้นจะใช้เครื่องหมายโคลอน (colon)
ต่อไปมาดูตัวอย่างของการ Inheritance ในภาษา C#
ในส่วนของฟังก์ชัน Main เราได้ทำการสร้างออบเจ็คจากคลาส Cube ขึ้นมาสองออบเจ็ค และจะสังเกตุว่าเรายังสามารถที่จะใช้ตัวแปร name และเมธอดได้
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());
Console.ReadKey();
}
}
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 Super 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 ของมัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น