Inheritance in Interfaces

เสฏฐพงศ์ มณีศาสตร์ 650710591

การสืบทอดอินเทอร์เฟซใน C#

การสืบทอดอินเทอร์เฟซ หมายถึงการสร้างอินเทอร์เฟซใหม่โดยรับสมาชิก (เมธอด, คุณสมบัติ) ทั้งหมดจากอินเทอร์เฟซที่มีอยู่แล้วมาใช้งาน และสามารถเพิ่มสมาชิกใหม่เข้าไปได้

ใน C# สามารถสืบทอดอินเทอร์เฟซได้โดยใช้เครื่องหมาย colon ( : ) ต่อท้ายหลังชื่ออินเทอร์เฟซที่จะทำการสร้าง แล้ว ตามด้วยชื่อของอินเทอร์เฟซที่ต้องการจะสืบทอด

Syntax:

// กำหนดอินเทอร์เฟซ
public interface interface1 
{
    void mymethod1();
    void mymethod2();
}

// การสืบทอดอินเทอร์เฟซ
public interface interface2 : interface1
{
    void mymethod3();
}

ตัวอย่างการสืบทอดอินเทอร์เฟซ:

public interface IAnimal
{
    void Eat();
}

public interface ICanine : IAnimal
{
    void Bark();
}

// คลาสที่implementอินเทอร์เฟซ ICanine จะต้องimplement ทั้ง Eat และ Bark
public class Dog : ICanine
{
    public void Eat()
    {
        Console.WriteLine("The dog is eating.");
    }

    public void Bark()
    {
        Console.WriteLine("The dog is barking.");
    }
}

การสืบทอดหลายอินเทอร์เฟซ

ใน C# สามารถสืบทอดได้หลายอินเทอร์เฟซพร้อมกันโดยใช้เครื่องหมายคอมมา (,)

// อินเทอร์เฟซแรก
public interface IEatable
{
    void Eat();
}

// อินเทอร์เฟซที่สอง
public interface ISwimmable
{
    void Swim();
}

// อินเทอร์เฟซที่สาม สืบทอดจากทั้ง IEatable และ ISwimmable
public interface IAmphibian : IEatable, ISwimmable
{
    void Walk();
}

// คลาสที่implement IAmphibian จะต้องimplementทั้ง Eat, Swim และ Walk
public class Frog : IAmphibian
{
    public void Eat()
    {
        Console.WriteLine("The frog is eating.");
    }

    public void Swim()
    {
        Console.WriteLine("The frog is swimming.");
    }

    public void Walk()
    {
        Console.WriteLine("The frog is walking.");
    }
}

ประโยชน์ของการใช้การสืบทอดอินเทอร์เฟซ

  • ด้านการจัดระเบียบโค้ด: การสืบทอดอินเทอร์เฟซช่วยให้สามารถรวมพฤติกรรมของอินเทอร์เฟซหลาย ๆ ตัวไว้ในคลาสเดียวกันได้ โดยที่โค้ดจะถูกจัดระเบียบและทำความเข้าใจได้ง่ายขึ้น

  • ด้านการลดความซ้ำซ้อนของโค้ด: เมื่อมีหลายอินเทอร์เฟซที่มีเมธอดคล้ายกัน การใช้การสืบทอดจะช่วยลดการเขียนโค้ดซ้ำซ้อน เพราะสามารถสร้างอินเทอร์เฟซพื้นฐานแล้วค่อยสืบทอดจากอินเทอร์เฟซนั้นมา implement ต่อได้

  • เพิ่มความยืดหยุ่น: การสืบทอดในอินเทอร์เฟซช่วยให้ผู้พัฒนาสามารถปรับเปลี่ยนหรือขยายฟังก์ชันการทำงานของอินเทอร์เฟซได้โดยไม่ต้องเปลี่ยนแปลงโค้ดหลักมากเกินไป สามารถเพิ่มอินเทอร์เฟซใหม่ที่สืบทอดจากอินเทอร์เฟซเดิมได้โดยไม่ยุ่งยาก

เปรียบเทียบภาษา C# กับ C++,Java,Python

การสืบทอดอินเทอร์เฟซของ C++

  • ไม่ได้มีคอนเซ็ปต์ของอินเทอร์เฟซโดยตรง แต่เราสามารถสร้างโครงสร้างที่คล้ายกันได้โดยใช้ Abstract Class

  • รองรับการสืบทอดหลายอินเทอร์เฟซ

การสืบทอดอินเทอร์เฟซของ java

  • คล้ายกับภาษา C# รองรับการสืบทอดหลายอินเทอร์เฟซ

การสืบทอดอินเทอร์เฟซของ Python

  • ใน Python ไม่มีการสืบทอดอินเทอร์เฟซโดยตรงเหมือนในภาษาอื่น เช่น Java หรือ C# แต่เราสามารถใช้แนวคิดที่คล้ายกันผ่านการใช้ abstract base classes (ABCs) และ สามารถ multiple inheritance ได้

ตัวอย่าง

#include <iostream>

// Abstract Class
class Shape {
public:
    virtual void draw() = 0;
    virtual float getArea() = 0;
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a circle" << std::endl;
    }
    float getArea() override {
        // ... (คำนวณพื้นที่วงกลม)
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing a rectangle" << std::endl;
    }
    float getArea() override {
        // ... (คำนวณพื้นที่สี่เหลี่ยม)
    }
}
/*อธิบายเพิ่มเติม:
    การสร้างแบบจำลองอินเทอร์เฟซในภาษา C++ สามารถสร้างโดยใช้การสร้างคลาสที่มีเฉพาะเมธอดเสมือนล้วน 
    หรือ pure virtual methods ก็คือ method ที่ สร้างขึ้นมาโดยยังไม่มีการimplement หรือไม่ได้
    มีการนิยาม methodนั้นๆ และเมื่อสืบทอดไปแล้วคลาสลูกจะต้องนิยาม method นั้นๆใหม่

Video:

Slide:

Reference:

  • inheritance in C#

  • C# Inheritance in interfaces

  • Interfaces in C++:

  • inheritance in C++

  • inheritance in Java

  • inheritance in Python

  • interfaces in Python:

Last updated