Interface (อินเทอร์เฟซ)
Interface กำหนดสมาชิก ได้แก่ Properties, Methods และ Events โดยมีเพียงการประกาศ (declaration) เท่านั้น ไม่มีการนำไปใช้งาน (implementation) คลาสที่สืบทอด (derived class) จะต้องเป็นผู้นำไปใช้งานสมาชิกเหล่านั้นเอง
Abstract Class (คลาสนามธรรม)
Abstract Class ทำหน้าที่คล้ายคลึงกัน แต่ใช้เมื่อต้องการให้คลาสพื้นฐาน (base class) ประกาศเพียงบางเมธอด และปล่อยให้คลาสลูก (derived class) นำไปใช้งานฟังก์ชันการทำงานต่างๆ
ตารางเปรียบเทียบความแตกต่าง
| คุณสมบัติ | Interface | Abstract Class |
|---|---|---|
| การสืบทอดหลายตัว (Multiple Inheritance) | รองรับ - คลาสหนึ่งสามารถ implement interface ได้หลายตัว | ไม่รองรับ - คลาสหนึ่งสืบทอด abstract class ได้เพียงตัวเดียว |
| Fields (ฟิลด์) | ไม่สามารถกำหนด fields ได้ | กำหนด fields ได้ |
| Access Modifiers | ไม่มี access modifiers (ทุกอย่างเป็น public โดยค่าเริ่มต้น) | มี access modifiers ครบถ้วน (public, private, protected, internal) |
| Constructor | ไม่มี constructor | มี constructor ได้ |
| การใช้งาน | เหมาะสำหรับกำหนดสัญญา (contract) ระหว่างคลาส | เหมาะสำหรับแบ่งปันโค้ดและพฤติกรรมพื้นฐาน |
เมื่อไหร่ควรใช้งานอะไร?
- ใช้ Interface เมื่อต้องการกำหนดพฤติกรรมที่คลาสหลายๆ ตัวสามารถนำไปใช้ได้ (เช่น
IDisposable,IComparable) - ใช้ Abstract Class เมื่อต้องการแบ่งปันโค้ดร่วมกัน และมีการนำไปใช้งานบางส่วนในคลาสพื้นฐานแล้ว