Interface In C#.NET In A Simple Way - Part Two

In this post, we will discuss the types of Interface in C#.NET with an example in a simple way.

We have already discussed the basic concept of interface in part one of this series. If you want to learn please click on the link basic interface concept.
 
Type of interfaces in C#
  • Explicit Interface
  • Implicit Interface 
Explicit Interface

If the class implements two interfaces that contain a member with the same signature, to implement those interface members in class we need the help of explicit interface.
How to implement the explicit interface?
  1. return_Type Interface_Name.Method_Name()  
  2.         {  
  3.             //...  
  4.         }  
Note
The modifier is not valid to implement the explicit interface. 
 
Example 1

Create two interfaces having only one method with the same signature as follows. 
  1. interface IVendor  
  2.    {  
  3.        void GetVendor();  
  4.    }  
  5.    interface ISupplier  
  6.    {  
  7.        void GetVendor();  
  8.    }  
Create one class name like 'UserService' to implement those interfaces. 
  1. public class UserService:IVendor,ISupplier  
  2.    {  
  3.           
  4.         void IVendor.GetVendor()  
  5.        {  
  6.            Console.WriteLine("GetVendor() method called from IVendor interface");  
  7.        }  
  8.         void ISupplier.GetVendor()  
  9.        {  
  10.            Console.WriteLine("GetVendor() method called from ISupplier interface");  
  11.        }  
  12.    }  
If you try to implement the interface member without 'interface name', then it will throw an error as follows.
 
 
 
How to call the interface member?

In an explicit interface, we cannot call interface member directly using object of the class. We have two ways of calling explicit interfaces as following.
 
There are two ways of calling explicit interface member:
  1. The first way is to create the instance of the class and typecast the interface type.
  2. The second way is to create an object of the class and reference variable of the interface type.
  1. class Program  
  2.    {  
  3.        static void Main(string[] args)  
  4.        {  
  5.            // The first way to creating the instance of the class and typecast the interface type.   
  6.            UserService userService = new UserService();  
  7.            ((IVendor)userService).GetVendor();  
  8.            ((ISupplier)userService).GetVendor();  
  9.   
  10.            // Second Way creating an object of the class and reference variable of the interface type.  
  11.   
  12.            IVendor vendor = new UserService();  
  13.            vendor.GetVendor();  
  14.            ISupplier supplier = new UserService();  
  15.            supplier.GetVendor();  
  16.   
  17.            Console.ReadLine();  
  18.        }  
  19.    }  
 Output

 

You can use either one of the ways of calling explicit interface members as per the requirement.
 
Example 2
  1. using System;  
  2.   
  3. namespace CSInterfaceDemo.Customer  
  4. {  
  5.     interface IService1  
  6.     {  
  7.         void Print();  
  8.     }  
  9.     interface IService2  
  10.     {  
  11.         void Print();  
  12.     }  
  13.     public class Customer:IService1, IService2  
  14.     {  
  15.         void IService1.Print()  
  16.         {  
  17.             Console.WriteLine("IService1.Print()");  
  18.         }  
  19.         void IService2.Print()  
  20.         {  
  21.             Console.WriteLine("IService2.Print()");  
  22.         }  
  23.     }  
  24.   
  25.     class program  
  26.     {  
  27.         static void Main(string[] args)  
  28.         {  
  29.             // The first way to creating the instance of the class and typecast the interface type.     
  30.             Customer customer = new Customer();  
  31.             ((IService1)customer).Print();  
  32.             ((IService2)customer).Print();  
  33.   
  34.             // Second Way creating an object of the class and reference variable of the interface type.   
  35.             IService1 service1 = new Customer();  
  36.             service1.Print();  
  37.             IService2 service2 = new Customer();  
  38.             service2.Print();  
  39.   
  40.             Console.ReadLine();  
  41.         }  
  42.     }  
  43. }  
Implicit Interface

The explicit interface does not have the same signature of the interface member. We can call the implicit interface member by using the object of the class.
 
Note
The modifier is required to implement the implicit interface.
 
How to implement the implicit interface?
  1. modifier return_type interface_method_name()  
  2.         {  
  3.             //....
  4.         }  
The following is an example of the implicit interface.
 
Example 1
  1. using System;  
  2.   
  3. namespace CSInterfaceDemo.Customer  
  4. {  
  5.     interface IService1  
  6.     {  
  7.         void Print();  
  8.     }  
  9.     interface IService2  
  10.     {  
  11.         void Display();  
  12.     }  
  13.     public class Customer:IService1, IService2  
  14.     {  
  15.        public void Print()  
  16.         {  
  17.             Console.WriteLine("IService1.Print()");  
  18.         }  
  19.        public void Display()  
  20.         {  
  21.             Console.WriteLine("IService2.Display()");  
  22.         }  
  23.     }  
  24.   
  25.     class program  
  26.     {  
  27.         static void Main(string[] args)  
  28.         {  
  29.             Customer customer = new Customer();  
  30.             customer.Print();  
  31.             customer.Display();  
  32.   
  33.             Console.ReadLine();  
  34.         }  
  35.     }  
  36. }  
The best practice to work with the interface is by adding new code. You can achieve a new requirement by adding new separate interface instead of changing old source code. This is the advice from the Interface Segregation Principle (ISP),

“Clients should not be forced to depend on methods that they do not use.” by Robert C. Martin.

I hope you understood the basic concept of explicit and implicit interface.