TOC

This article is currently in the process of being translated into Thai (~98% done).

Classes:

Abstract classes

Abstract class มี keyword คือ abstract ใช้เพื่อสร้าง base class คุณลักษณะพิเศษของมันก็คือ มันไม่สามารถสร้าง instance object ได้ ถ้าลองสร้าง compiler จะบอกว่ามีข้อผิดพลาดเกิดขึ้น ถ้าจะสร้าง เราต้องสร้าง subclass ของมันก่อน ดังที่เรียนมาในบท inheritance แล้วถึงจะสร้าง instance object ของ subclass อีกที แล้วเมื่อไหร่เราถึงจะสร้าง? มันก็ขึ้นอยู่กับการออกแบบโครงสร้างโปรแกรมของเรา

จริงๆแล้วเราไม่ต้องใช้ abstract class ก็ได้ แต่ทางที่ดีเราควรจัดระเบียบให้กับโค้ดของเรา ซึ่ง .NET framework จะใช้ abstract class นีเสมอ เปรียบเทียบได้กับ เราสร้างอะไรที่เป็นต้นแบบขึ้นมา ที่เป็นแนวคิดแต่ยังไม่ได้เอาออกมาใช้จริง

ในตัวอย่างนี้ เราจะสร้าง base class สำหรับสัตว์ 4 เท้า แล้วเราก็สร้าง Dog class ขึ้นมาที่สืบทอดลักษณะมาอีกที

namespace AbstractClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            Console.WriteLine(dog.Describe());
            Console.ReadKey();
        }
    }

    abstract class FourLeggedAnimal
    {
        public virtual string Describe()
        {
            return "Not much is known about this four legged animal!";
        }
    }

    class Dog : FourLeggedAnimal
    {

    }
}

ถ้าเปรียบเทียบกับตัวอย่างในบท inheritance จะเห็นความแตกต่างแค่ keyword abstract ด้านหน้าของ class ForLeggedAnimal ตอนนี้เราสามารถสร้าง instance object ของ Dog class ได้และใช้ method Describe() จาก class FourLeggedAnimal ได้ ทีนี้เรามาลองสร้าง instance object ของ class FourleggedAnimal

FourLeggedAnimal someAnimal = new FourLeggedAnimal();

compiler จะบอกว่ามีข้อผิดพลาดเกิดขึ้น

Cannot create an instance of the abstract class or interface 'AbstractClasses.FourLeggedAnimal' (ไม่สามารถสร้าง instance object ของ abstract class หรือ interface ‘AbstractClasses.FourLeggedAnimal’)

ดังที่เห็นเราได้สืบทอดลักษณะมาจาก Describe() method เราลองมา override method ดู

class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        return "This four legged animal is a Dog!";
    }
}

ในที่นี้ เราได้ override method มาทั้งหมด แต่บางทีเราก็ต้องการใช้การทำงานของ base class ด้วย เราก็จะใช้ keyword base เพื่อโยงไปยัง class ที่เราได้สืบทอดมา

abstract class FourLeggedAnimal
{
    public virtual string Describe()
    {
        return "This animal has four legs.";
    }
}


class Dog : FourLeggedAnimal
{
    public override string Describe()
    {
        string result = base.Describe();
        result += " In fact, it's a dog!";
        return result;
    }
}

ตอนนี้เราได้สร้าง subclass ของ FourLeggedAnimal class บางทีเราควรลองสร้าง class ของ cat หรือ lion ไหม? ในบทต่อไปเราจะมาเรียนถึงการใช้ abstract ที่มีประสิทธิภาพขึ้น


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!