About
In this code snippet, we will take a look at interfaces in C#.
When I was first learning about interfaces I was given this analogy: “Interfaces are like contracts that specify what a class has to implement”. When a class uses an interface it must implement everything that the interface specifies.
Interfaces are very similar to abstract classes. But a class can only inherit from one other class meanwhile it can implement multiple interfaces. When naming an interface the convention is to start the name with I.
Interfaces can contain: events, indexers, methods, properties
Interfaces can’t contain: constants, types, fields, constructors, operators, finalizers
Let’s have a look at the code below to see how to make an interface.
Code:
using System; namespace Interfaces { class Program { static void Main(string[] args) { //In this example we we will make objects of IOT(internet of things) devices. LightBulb bulb1 = new LightBulb("Lightbulb Kitchen", "192.168.1.10"); LightBulb bulb2 = new LightBulb("Lightbulb Bedroom", "192.168.1.11"); DeskLamp lamp1 = new DeskLamp("Bedroom Deskamp", "192.168.1.12"); TemperatureSensor temp1 = new TemperatureSensor("Temperature Sensor Yard", "192.168.1.13"); bulb1.on(); bulb2.on(); lamp1.on(); lamp1.dimm(50); temp1.getTemperature(); Console.ReadLine(); } } /******************************************** Interfaces **********************************************/ //Interfaces contain the things that must be implemented when that particular interface is used. //Each class using the interface can define a different implementation for a particular member of the interface. //For example the on() method is implemented a bit differntly for every device. //Every IOT device should implement this interface. interface IOTDevice { string Name { get; set; } string IpAdress { get; set; } } //Some devices are controllable(can be turned on/off). Those should implement this interface. interface IControllable { void on(); void off(); } //Some lights are dimmable. Those should implement this interface. interface IDimmable { void dimm(int percent); } /////////////////////////////////////////////////////////////////////////////////////////////////////// //As you see a class can implement multiple interfaces. class LightBulb : IOTDevice, IDimmable, IControllable // <= Interfaces { public LightBulb(string name, string ipAdress) { Name = name; IpAdress = ipAdress; } //IOTDevice interface implementation //////////////////// public string Name { get; set; } public string IpAdress { get; set; } ///////////////////////////////////////////////////////// //IControllable interface implementation //////////////// public void off() { Console.WriteLine("The light bulb " + Name + " was turned off."); } public void on() { Console.WriteLine("The light bulb " + Name + " was turned on."); } ///////////////////////////////////////////////////////// //IDimmable interface implementation //////////////////// public void dimm(int percent) { Console.WriteLine("The light bulb " + Name + " was dimmed to " + percent + "%."); } ///////////////////////////////////////////////////////// } class DeskLamp : IOTDevice, IDimmable, IControllable { public DeskLamp(string name, string ipAdress) { Name = name; IpAdress = ipAdress; } //IOTDevice interface implementation //////////////////// public string Name { get; set; } public string IpAdress { get; set; } ///////////////////////////////////////////////////////// //IControllable interface implementation //////////////// public void off() { Console.WriteLine("The desk lamp " + Name + " was turned off."); } public void on() { Console.WriteLine("The desk lamp " + Name + " was turned on."); } ///////////////////////////////////////////////////////// //IDimmable interface implementation //////////////////// public void dimm(int percent) { Console.WriteLine("The desk lamp " + Name + " was dimmed to " + percent + "%."); } ///////////////////////////////////////////////////////// } class TemperatureSensor : IOTDevice { public TemperatureSensor(string name, string ipAdress) { Name = name; IpAdress = ipAdress; } //IOTDevice interface implementation //////////////////// public string Name { get; set; } public string IpAdress { get; set; } ///////////////////////////////////////////////////////// public void getTemperature() { //Yeah ... not really getting the temperature here, just making up some random numbers. Random rand = new Random(); Console.WriteLine("The temperature is " + rand.Next(-20, 40) + " degrees C."); } } }