ใช้สมาชิกอินเทอร์เฟซที่ชัดเจนในคลาส
ใน C# การใช้งานอินเทอร์เฟซที่ชัดเจนจะช่วยให้คลาส สามารถใช้สมาชิกอินเทอร์เฟสในลักษณะที่พวกเขาสามารถเข้าถึงได้ผ่านอินเทอร์เฟซเท่านั้น ไม่ใช่อินสแตนซ์คลาส สิ่งนี้มีประโยชน์เมื่อคลาสใช้อินเทอร์เฟซหลายรายการกับสมาชิกที่มีลายเซ็นเดียวกัน
อินเทอร์เฟซหลายรายการในคลาส
คลาสใน C# สามารถใช้อินเทอร์เฟซหลายรายการเพื่อให้สามารถสืบทอดลักษณะการทํางานจากแหล่งข้อมูลต่าง ๆ ได้ ความสามารถในการรวมอินเทอร์เฟซหลายรายการเป็นสิ่งสําคัญเนื่องจาก C# ไม่สนับสนุนการสืบทอดของคลาสหลายรายการ การใช้อินเทอร์เฟซหลายตัวช่วยให้คลาสมีคุณลักษณะที่แตกต่างกันและตรวจสอบให้แน่ใจว่าเป็นไปตามกฎที่กําหนดโดยอินเทอร์เฟซเหล่านั้น
- อินเทอร์เฟซจะกําหนดกลุ่มของฟังก์ชันการทํางานที่เกี่ยวข้อง
- คลาสหรือหลักต้องใช้สมาชิกทั้งหมดของอินเทอร์เฟซที่สืบทอดมา
- อินเทอร์เฟซอาจประกอบด้วยวิธีการ คุณสมบัติ เหตุการณ์ และตัวทําดัชนี
ต่อไปนี้คืออินเทอร์เฟซแบบง่ายสองตัวสําหรับตัวอย่างของเรา:
public interface IEnglishDimensions
{
float Length();
float Width();
}
public interface IMetricDimensions
{
float Length();
float Width();
}
สมาชิกอินเทอร์เฟซที่ชัดเจน
ใน C# คลาสสามารถสืบทอดมาจากระดับเดียวเท่านั้น แต่สามารถใช้อินเทอร์เฟซหลายรายการได้ ซึ่งมีความสําคัญโดยเฉพาะอย่างยิ่งเมื่ออินเทอร์เฟซหลายรายการมีชื่อสมาชิกเดียวกัน เพื่อหลีกเลี่ยงความสับสน เราใช้การใช้งานอินเทอร์เฟซที่ชัดเจน
การใช้งานอินเทอร์เฟซที่ชัดเจนช่วยให้แน่ใจว่าสมาชิกแต่ละคนของอินเทอร์เฟซมีการใช้งานที่ไม่ซ้ําใครซึ่งจะป้องกันความขัดแย้ง นอกจากนี้ยังชี้แจงอินเทอร์เฟซที่สมาชิกเป็นสมาชิกเมื่อคลาสใช้อินเทอร์เฟซสองรายการขึ้นไปพร้อมชื่อสมาชิกเดียวกัน การนําอินเทอร์เฟซแบบชัดเจนไปใช้ช่วยให้คลาสสามารถตอบสนองความต้องการของอินเทอร์เฟซหลายรายการและให้ฟังก์ชันการทํางานที่หลากหลาย
หากต้องการใช้สมาชิกของอินเทอร์เฟซอย่างชัดเจนคุณต้องเพิ่มชื่ออินเทอร์เฟซและรอบระยะเวลาก่อนชื่อสมาชิก ตัวอย่างมีดังนี้:
public class Box : IEnglishDimensions, IMetricDimensions
{
float IEnglishDimensions.Length()
{
return 30.0f;
}
float IEnglishDimensions.Width()
{
return 20.0f;
}
float IMetricDimensions.Length()
{
return 76.2f;
}
float IMetricDimensions.Width()
{
return 50.8f;
}
}
ในโค้ดBoxนี้ คลาส จะใช้อินเทอร์เฟซสองรายการ: IEnglishDimensions และIMetricDimensions อินเทอร์เฟซทั้งสองมีสมาชิกที่Lengthชื่อและWidth เพื่อหลีกเลี่ยงความสับสนสมาชิกแต่ละคนจะถูกเชื่อมโยงอย่างชัดเจนกับอินเทอร์เฟซ
หมายเหตุ
สมาชิกส่วนติดต่อที่นําไปใช้อย่างชัดเจนไม่มีตัวปรับเปลี่ยนการเข้าถึงเช่น public, private, ฯลฯ สามารถเข้าถึงได้ผ่านอินสแตนซ์ของอินเทอร์เฟซเท่านั้น ไม่ใช่คลาส ซึ่งหมายความว่า คุณไม่สามารถเรียกใช้ Box.Length()แต่คุณสามารถเรียกใช้IEnglishDimensions.Length()ถ้าคุณมีอินสแตนซ์ของBoxที่กําลังถือว่าเป็นIEnglishDimensions
ใช้สมาชิกอินเทอร์เฟซแบบชัดเจน
คุณจําเป็นต้องสร้างอินสแตนซ์ของอินเทอร์เฟซและเรียกใช้สมาชิกเพื่อดําเนินการและทดสอบโค้ดที่ใช้สมาชิกอินเทอร์เฟซที่ชัดเจน ซึ่งทําให้แน่ใจว่ามีการเรียกใช้การใช้งานที่ถูกต้องตามชนิดของอินเทอร์เฟซ
Box box = new Box();
IEnglishDimensions eDimensions = box;
IMetricDimensions mDimensions = box;
Console.WriteLine($"Length in inches: {eDimensions.Length()}");
Console.WriteLine($"Width in inches: {eDimensions.Width()}");
Console.WriteLine($"Length in centimeters: {mDimensions.Length()}");
Console.WriteLine($"Width in centimeters: {mDimensions.Width()}");
ในตัวอย่างนี้ อินสแตนซ์ของ Box คลาสจะถูกแปลงเป็นทั้ง IEnglishDimensions และ IMetricDimensions เพื่อเข้าถึงสมาชิกอินเทอร์เฟซที่ชัดเจน ผลลัพธ์จะแสดงมิติทั้งในภาษาอังกฤษและหน่วยเมตริก
Length in inches: 30
Width in inches: 20
Length in centimeters: 76.2
Width in centimeters: 50.8
ใน C# คุณสามารถใช้อินเทอร์เฟซหลายรายการในคลาสโดยใช้การใช้งานอินเทอร์เฟซที่ชัดเจนเพื่อแก้ไขความขัดแย้งในการตั้งชื่อเมื่อสมาชิกมีลายเซ็นเดียวกัน สมาชิกที่ใช้งานอย่างชัดเจนสามารถเข้าถึงได้ผ่านอินสแตนซ์อินเทอร์เฟซ ไม่ใช่อินสแตนซ์ของคลาส เพื่อให้มั่นใจถึงฟังก์ชันการทํางานที่เหมาะสมและหลีกเลี่ยงความคลุมเครือ วิธีนี้ช่วยเพิ่มความสามารถในการดูแลรักษาโค้ดโดยการกําหนดลักษณะการทํางานที่กําหนดไว้สําหรับแต่ละอินเทอร์เฟซอย่างชัดเจน ทําให้โค๊ดเบสเข้าใจและขยายง่ายขึ้น