Interface ใน C # คืออะไรพร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
อินเทอร์เฟซใน C# กำหนดคอนtract ที่ระบุว่าคลาสต้องนำเมธอดและคุณสมบัติใดไปใช้ โดยไม่ต้องให้โค้ดจริง คลาสที่นำไปใช้จะให้พฤติกรรมที่เป็นรูปธรรม ทำให้เกิดการเชื่อมโยงแบบหลวมๆ และการสืบทอดแบบหลายทางข้ามประเภทที่ไม่เกี่ยวข้องกันได้

ส่วนต่อประสานใน C # คืออะไร?
An อินเตอร์เฟซ ใน C# จะใช้ร่วมกับคลาสเพื่อกำหนดคอนtracอินเทอร์เฟซคือข้อตกลงเกี่ยวกับสิ่งที่คลาสจะมอบให้แก่แอปพลิเคชัน อินเทอร์เฟซกำหนดว่าคลาสสามารถดำเนินการใดได้บ้าง อินเทอร์เฟซประกาศคุณสมบัติและเมธอด ส่วนคลาสจะเป็นผู้กำหนดว่าเมธอดนั้นจะทำอะไรอย่างแน่ชัด
มาดูตัวอย่างอินเทอร์เฟซโดยการเปลี่ยนคลาสในแอปพลิเคชันคอนโซลของเรา โปรดทราบว่าเราจะไม่เรียกใช้โค้ดเนื่องจากไม่มีสิ่งใดที่สามารถเรียกใช้โดยใช้อินเทอร์เฟซได้
ตัวอย่างอินเทอร์เฟซ C#
มาสร้างคลาสอินเทอร์เฟซกันเถอะ คลาสนี้จะชื่อว่า “Guru99Interface” คลาสหลักของเราจะสืบทอดจากอินเทอร์เฟซที่กำหนดไว้ โค้ดทั้งหมดจะต้องเขียนในไฟล์ Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { interface IGuru99Interface { void SetTutorial(int pID, string pName); String GetTutorial(); } class Guru99Tutorial : IGuru99Interface { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID, string pName) { TutorialID = pID; TutorialName = pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Guru99Tutorial pTutor = new Guru99Tutorial(); pTutor.SetTutorial(1,".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
Code คำอธิบาย:-
ที่นี่ เราจะอธิบายส่วนสำคัญของโค้ด
- ขั้นแรก เราจะกำหนดอินเทอร์เฟซที่เรียกว่า “Guru99อินเทอร์เฟซ” โปรดสังเกตว่าคำหลัก “อินเทอร์เฟซ” ใช้เพื่อกำหนดอินเทอร์เฟซ
- ต่อไป เราจะกำหนดวิธีการที่จะใช้กับอินเทอร์เฟซของเรา ในกรณีนี้ เราจะกำหนดวิธีการเดียวกันกับที่ใช้ในตัวอย่างก่อนหน้านี้ทั้งหมด โปรดทราบว่าอินเทอร์เฟซจะประกาศวิธีการเท่านั้น ไม่ได้กำหนดโค้ดในวิธีการเหล่านั้น
- จากนั้นเราจึงสร้างของเรา Guruคลาส 99Tutorial สืบทอดมาจากอินเทอร์เฟซ ตรงนี้คือส่วนที่เราเขียนโค้ดเพื่อกำหนดเมธอดต่างๆ ที่ประกาศไว้ในอินเทอร์เฟซ การเขียนโค้ดแบบนี้จะทำให้ได้ผลลัพธ์ดังต่อไปนี้
- สิ่งนี้ทำให้มั่นใจได้ว่าชั้นเรียนนั้น Guru99Tutorial จะเพิ่มเฉพาะโค้ดที่จำเป็นสำหรับเมธอด "SetTutorial" และ "GetTutorial" เท่านั้น และไม่มีการเพิ่มโค้ดส่วนอื่นใด
- นอกจากนี้ยังช่วยให้มั่นใจได้ว่าอินเทอร์เฟซจะทำงานเหมือนกับคอนโทรลtracที ชั้น ต้องปฏิบัติตามข้อตกลงtract. ดังนั้นถ้า contracถ้าบอกว่าควรมีสองเมธอดชื่อ “SetTutorial” และ “GetTutorial” ก็ควรจะเป็นแบบนั้น
C# Interface เทียบกับ Abstracคลาส t
คำถามทั่วไปสำหรับผู้เริ่มต้นคือ อินเทอร์เฟซของ C# แตกต่างจากอย่างไร เอบีเอสtract-classทั้งสองนิยาม contracเช่นเดียวกับประเภทอื่นๆ แต่มีเป้าหมายการออกแบบที่แตกต่างกัน
ความแตกต่างที่สำคัญมีดังต่อไปนี้:
- การดำเนินการ: อินเทอร์เฟซประกอบด้วยเฉพาะการประกาศ ในขณะที่ค่าสัมบูรณ์tracคลาส t สามารถให้ทั้ง abs ได้tracสมาชิก t และวิธีการที่ได้รับการดำเนินการอย่างสมบูรณ์
- การสืบทอดทางกรรมพันธุ์หลายทาง: คลาสหนึ่งสามารถใช้งานอินเทอร์เฟซได้หลายแบบ แต่สามารถสืบทอดคุณสมบัติพื้นฐานได้เพียงหนึ่งเดียวเท่านั้นtracคลาส t
- สถานะ: กล้ามท้องtracคลาสสามารถเก็บฟิลด์ ตัวสร้าง และคุณสมบัติที่มีข้อมูลได้ ในขณะที่อินเทอร์เฟซไม่สามารถเก็บสถานะของอินสแตนซ์ได้
- ตัวแก้ไขการเข้าถึง: abstracสมาชิกของคลาส t สามารถเป็นสาธารณะ ป้องกัน หรือส่วนตัวได้ ในขณะที่สมาชิกของอินเทอร์เฟซแบบคลาสสิกจะเป็นสาธารณะโดยปริยาย
- ใช้กรณี: ใช้อินเทอร์เฟซเพื่อเพิ่มความสามารถข้ามประเภทที่ไม่เกี่ยวข้องกัน และค่าสัมบูรณ์tracคลาส t ใช้สำหรับแบ่งปันโค้ดร่วมกันระหว่างประเภทที่เกี่ยวข้องอย่างใกล้ชิด
โดยสรุป อินเทอร์เฟซอธิบายว่าคลาสสามารถทำอะไรได้บ้าง ในขณะที่ค่าสัมบูรณ์tracคลาส t ยังสามารถกำหนดส่วนหนึ่งของวิธีการดำเนินการได้อีกด้วย
วิธีใช้งานอินเทอร์เฟซหลายตัวใน C#
แตกต่างจากการสืบทอดคลาสทั่วไป ภาษา C# อนุญาตให้คลาสเดียวสามารถใช้งานอินเทอร์เฟซได้มากกว่าหนึ่งรายการ นี่คือวิธีที่ภาษาเสนอรูปแบบการสืบทอดแบบหลายทางที่ปลอดภัย โดยปราศจากความกำกวมที่เกิดขึ้นจากการสืบทอดคลาสพื้นฐานหลายคลาสพร้อมกัน
ในการใช้งานอินเทอร์เฟซหลายรายการ ให้ระบุอินเทอร์เฟซเหล่านั้นต่อท้ายชื่อคลาส และคั่นแต่ละรายการด้วยเครื่องหมายจุลภาค จากนั้นคลาสจะต้องกำหนดเมธอดทุกเมธอดที่ประกาศไว้ในแต่ละอินเทอร์เฟซที่คลาสใช้งาน
ขั้นตอน 1) ประกาศอินเทอร์เฟซสองรายการ โดยแต่ละรายการมีเมธอดของตนเอง
ขั้นตอน 2) สร้างคลาสที่ใช้งานทั้งสองอินเทอร์เฟซ โดยคั่นชื่ออินเทอร์เฟซด้วยเครื่องหมายจุลภาค
ขั้นตอน 3) ระบุเนื้อหาเมธอดสำหรับสมาชิกทุกตัวที่ประกาศในแต่ละอินเทอร์เฟซ
ตัวอย่างด้านล่างแสดงคลาส Document ที่ใช้งานทั้ง IReadable และอินเทอร์เฟซ IWritable
using System; namespace DemoApplication { interface IReadable { void Read(); } interface IWritable { void Write(); } class Document : IReadable, IWritable { public void Read() { Console.WriteLine("Reading the document"); } public void Write() { Console.WriteLine("Writing to the document"); } static void Main(string[] args) { Document doc = new Document(); doc.Read(); doc.Write(); Console.ReadKey(); } } }
Code คำอธิบาย:-
- เราประกาศอินเทอร์เฟซสองตัว คือ IReadable และ IWritable แต่ละอินเทอร์เฟซจะประกาศเมธอดเดียวโดยไม่มีเนื้อหาเมธอด
- คลาส Document แสดงรายการอินเทอร์เฟซทั้งสองหลังจากเครื่องหมายโคลอน โดยคั่นด้วยเครื่องหมายจุลภาค ดังนั้นจึงยอมรับการใช้งานอินเทอร์เฟซทั้งสองแบบtracทีเอส
- จากนั้นคลาสจะกำหนดเมธอด Read และ Write ข้ามไปping ไม่ว่าจะใช้วิธีใดก็จะทำให้เกิดข้อผิดพลาดขณะคอมไพล์
- เมธอด Main สร้างอ็อบเจ็กต์ Document และเรียกใช้ทั้งสองเมธอด ซึ่งเป็นการพิสูจน์ว่าคลาสนี้ตรงตามข้อกำหนดของอินเทอร์เฟซทั้งสอง
เมื่อโปรแกรมทำงาน มันจะพิมพ์... การอ่านเอกสาร ในบรรทัดแรกและ การเขียนเอกสาร ในบรรทัดที่สอง รูปแบบนี้ทำให้แต่ละคอนtracมีขนาดเล็กและเน้นเฉพาะจุด ทำให้คลาส Document ทดสอบและขยายได้ง่ายขึ้น
ข้อดีของการใช้อินเทอร์เฟซใน C#
อินเทอร์เฟซถูกใช้งานอย่างแพร่หลายในโปรเจ็กต์ C# ระดับมืออาชีพ เนื่องจากทำให้โค้ดมีความยืดหยุ่นและบำรุงรักษาง่ายขึ้น นอกจากนี้ยังช่วยให้คุณเขียนโปรแกรมได้อย่างมีประสิทธิภาพมากขึ้นtract มากกว่าที่จะเป็นคลาสที่เฉพาะเจาะจง
ข้อดีหลัก ได้แก่ :
- ข้อต่อหลวม: Code ขึ้นอยู่กับอินเทอร์เฟซ ไม่ใช่คลาสเฉพาะ ดังนั้นการใช้งานจึงสามารถเปลี่ยนแปลงได้โดยไม่ทำให้ผู้เรียกใช้งานเสียหาย
- การสืบทอดทางกรรมพันธุ์หลายทาง: คลาสสามารถสืบทอดพฤติกรรมจากอินเทอร์เฟซหลายๆ ตัวได้ ซึ่งการสืบทอดคลาสแบบธรรมดาไม่สามารถทำได้
- ความสามารถในการทดสอบ: อินเทอร์เฟซช่วยให้การเปลี่ยนคลาสจริงเป็นอ็อบเจ็กต์จำลองระหว่างการทดสอบหน่วยทำได้ง่ายขึ้น
- การฉีดพึ่งพา: เฟรมเวิร์กจะแทรกการใช้งานอินเทอร์เฟซในระหว่างการทำงาน ซึ่งเป็นแนวคิดหลักเบื้องหลังหลักการ SOLID
- สอดคล้อง: คลาสที่ใช้งานทุกคลาสจะต้องมีชุดสมาชิกเดียวกัน ซึ่งทำให้ API สามารถคาดเดาได้
ด้วยเหตุผลเหล่านี้ อินเทอร์เฟซจึงเป็นหัวใจสำคัญของรูปแบบการออกแบบและเฟรมเวิร์กแอปพลิเคชัน C# สมัยใหม่ส่วนใหญ่

