एक इंटरफेस एक अनुबंध को परिभाषित करता है जिसे क्लास या स्ट्रक्चर द्वारा लागू किया जाएगा। इसमें मेथड्स, प्रॉपर्टीज, इवेंट्स, और इंडेक्सर्स हो सकते हैं। एक इंटरफेस क्लास के समान है सिवाय इसके कि यह कोई डेटा नहीं रखता और केवल उस व्यवहार को निर्दिष्ट करता है जो यह कर सकता है (या अधिक सटीक रूप से, वह क्लास जो इसे लागू करती है वह कर सकती है)।
एक क्लास एक या अधिक इंटरफेस लागू कर सकती है। एक इंटरफेस सदस्य को लागू करने के लिए, क्लास में उसी मेथड परिभाषा के साथ एक पब्लिक सदस्य होना चाहिए, यानी वही नाम और सिग्नेचर।
उदाहरण के लिए, IComparer System.Collections नेमस्पेस में परिभाषित एक इंटरफेस है जो दो ऑब्जेक्ट्स की तुलना करने वाले मेथड के लिए अनुबंध को परिभाषित करता है। Car क्लास IComparer इंटरफेस को लागू करती है
public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }इंटरफेस पर सभी सदस्य अंतर्निहित रूप से abstract होते हैं और उनके कोई कार्यान्वयन विवरण नहीं होते। सभी इंटरफेस सदस्य public होते हैं। आप इंटरफेस सदस्य के साथ एक्सेस मॉडिफायर का उपयोग नहीं कर सकते। इंटरफेस को लागू करने वाली क्लास को इंटरफेस को लागू करने वाले पब्लिक मेथड्स प्रदान करने होंगे।
एक इंटरफेस अन्य इंटरफेस को विस्तारित कर सकता है, उदाहरण के लिए −
public interface IPerformer { void Perform(); } public interface ISinger : IPerformer{ void Sing(); }इंटरफेस आपको एक क्लास में कई स्रोतों से व्यवहार शामिल करने की अनुमति देते हैं। चूंकि C# C++ की तरह मल्टीपल इनहेरिटेंस की अनुमति नहीं देता, इंटरफेस C# में मल्टीपल इनहेरिटेंस प्राप्त करने का एक तरीका है।
इंटरफेस की एक कमी यह है कि जब आप उनका उपयोग API उजागर करने के लिए करते हैं तो वे क्लासेस की तुलना में कम लचीले होते हैं। जब आप इंटरफेस के अनुबंध को बदलते हैं, तो उस इंटरफेस को लागू करने वाली सभी क्लासेस टूट जाती हैं और इंटरफेस को लागू करने के लिए अपडेट करने की आवश्यकता होती है।
उदाहरण
using System; class Program{ static void Main(){ var carOne = new Car { Name = "Honda", Speed = 100 }; var carTwo = new Car { Name = "Toyota", Speed = 70 }; carOne.Drive(); carTwo.Drive(); } } public interface IDriver{ void Drive(); } public class Car : IDriver{ public string Name { get; set; } public int Speed { get; set; } public void Drive(){ Console.WriteLine($"{Name}: {Speed}"); } }आउटपुट
Honda: 100 Toyota: 70