25.Interface

💬 เคยหงุดหงิดไหมว่าเวลาที่เราเรียกใช้ method ประเภทเดิมๆ แต่ชื่อมันไม่ซ้ำกันเลย เช่น จะเปิดทีวีต้องเรียกใช้ method TurnOn พอจะเปิดพัดลมต้องเรียกใช้ method method SwitchOn พอจะเปิดไฟต้องเรียกใช้ method LightOn ไรงี้ ทั้งๆที่ทั้งหมดมันก็เป็นการสั่งให้เปิดเหมือนกันแท้ๆ แต่ทำไมแต่ละคลาสต้องตั้งชื่อต่างกันด้วยยยย แค่คิดก็หงุดหงิดแล้วที่ต้องไปคอยจำชื่อ method แต่ละตัว ดังนั้นในรอบนี้เราจะมาทำการสร้างมาตรฐานการเขียนโค้ดด้วยสิ่งที่ชื่อว่า Interface กันนะฮ๊าฟฟฟฟ (อารมณ์ดีละพอได้ยินชื่อนี้)

🎯 สรุปสั้นๆ

👨‍🚀 Interface คือ

แบบอย่างหรือมาตรฐานของคลาส โดยมันจะบังคับว่าคลาสที่ implement interface จะต้องมีทุกอย่างที่ interface นั้นๆมีด้วย

Microsoft standard โดยปรกติเวลาที่ทาง Microsoft สร้าง interface ขึ้นมา เขาจะใส่ตัวไอใหญ่ I นำหน้าไว้เสมอ เช่น ICloneable, IComparable, IDisposable บลาๆ ซึ่งเราจะไม่ทำตามก็ทำงานได้นะ และภาษาอื่นๆก็ไม่ได้ทำแบบนี้ด้วย แต่ถ้าเราเขียนภาษา C# เป็นชีวิตจิตใจอยู่แล้วผมนะนำว่าเราควรจะทำตามมาตรฐานนี้ไว้ครับเพราะมันเป็นมาตรฐานสากลของ developer สาย .NET นั่นเอง

Interface 1.ไม่ได้เอาไว้สร้าง object แต่สามารถเก็บ object ของ class ที่ implement interface นั้นๆได้ 2.ของที่อยู่ใน interface จะไม่สามารถมี body หรือ implementation ได้ (ยกเว้น C# version 8.0 ขึ้นไป)

C# version 8.0 ใน C# version 8.0 หรือใน .NET Core 3 นั้นตัว interface จะสามารถมีสิ่งที่เรียกว่า Default interface members หรือพูดง่ายๆคือของใน interface สามารถมี body ได้แล้วนั่นเอง

ตัวอย่างการทำ Default interface members

interface ILogger
{
    void Log(LogLevel level, string message);
    void Log(Exception ex) => Log(LogLevel.Error, ex.ToString());
}

C# 8.0 มีอะไรใหม่บ้าง 1.อ่านเอาได้จาก Microsoft: What's new in C# 8.0 2.การใช้ default interface members Microsoft: Default interface members versions

Last updated