Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

อินเทอร์เฟซทำงานใน C # อย่างไร


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

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

ตัวอย่างเช่น IComparer คืออินเทอร์เฟซที่กำหนดไว้ในเนมสเปซ System.Collections ที่กำหนดสัญญาสำหรับวิธีการที่เปรียบเทียบสองอ็อบเจ็กต์ คลาสรถใช้อินเทอร์เฟซ IComparer

อินเทอร์เฟซสาธารณะ IDriver{ void Drive();}รถคลาสสาธารณะ:IDriver{ ชื่อสตริงสาธารณะ { รับ; ชุด; } ความเร็วสาธารณะ { รับ; ชุด; } โมฆะสาธารณะ Drive(){ Console.WriteLine($"{Name}:{Speed}"); }}

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

อินเทอร์เฟซสามารถขยายอินเทอร์เฟซอื่น ๆ เช่น −

<ก่อนหน้า> IPerformer อินเทอร์เฟซสาธารณะ { ถือเป็นโมฆะ ดำเนินการ (); }อินเทอร์เฟซสาธารณะ ISinger :IPerformer{ void Sing();}

อินเทอร์เฟซช่วยให้คุณสามารถรวมพฤติกรรมจากแหล่งที่มาต่างๆ ในชั้นเรียนได้ เนื่องจาก C# ไม่อนุญาตให้มีการสืบทอดหลายรายการ เช่น C++ อินเทอร์เฟซเป็นวิธีหนึ่งในการบรรลุหลายส่วนใน C#

ข้อเสียของอินเทอร์เฟซคือมีความยืดหยุ่นน้อยกว่าคลาสเมื่อคุณใช้เพื่อเปิดเผย API เมื่อคุณเปลี่ยนสัญญาของอินเทอร์เฟซ คลาสทั้งหมดที่ใช้อินเทอร์เฟซนั้นจะพังและจำเป็นต้องอัปเดตเพื่อใช้งานอินเทอร์เฟซ

ตัวอย่าง

ใช้ System;class Program{ static void Main(){ var carOne =new Car { Name ="Honda", Speed ​​=100 }; var carTwo =รถใหม่ { Name ="Toyota", Speed ​​=70 }; carOne.Drive(); carTwo.Drive(); }} ส่วนต่อประสานสาธารณะ IDriver{ void Drive();}รถคลาสสาธารณะ:IDriver{ ชื่อสตริงสาธารณะ { รับ; ชุด; } ความเร็วสาธารณะ { รับ; ชุด; } โมฆะสาธารณะ Drive(){ Console.WriteLine($"{Name}:{Speed}"); }}

ผลลัพธ์

ฮอนด้า:100โตโยต้า:70