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

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

        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 ของมัน

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

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

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...