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