The primary motivation of introducing inerface
is to enforce OO-style of thinking while revoking the drawbacks of multiple inheritance. In fact, the support for explicit interface implementation is an important tool in OO-developers’ toolbox. Utilizing this concept, we can implement multiple interfaces in a class, and still no ambiguity gets introduced.
In fact, explicit interface implementation ensures private accessibility via interface reference. That is, in order to access any member of a class that implements an interface explicitly, an interface reference
is required, which supports the concept called “Run-time Bindings“, and introduces a higher level of abstraction.
In the rest of the post we focus on following–
Defining interfaces,
Implementation of the interfaces explicitly,
Advantages of explicit interface implementation.
To do so, we start by defining interfaces and shows how to apply explicit interface implementation using an example. Please note that, this is a simple and contrived example, intended only to be illustrative.
public interface ISimpleCalculator{ | |
int Add(int num1, int num2); | |
} | |
public interface ICalculator{ | |
double Add(double num1, double num2); | |
} |
The following class Calculator
implements both interfaces using explicit interface implementation.
public class Calculator:ISimpleCalculator,ICalculator{ | |
int ISimpleCalculator.Add (int num1, int num2) | |
{ | |
return num1 + num2; | |
} | |
double ICalculator.Add (double num1, double num2) | |
{ | |
return num1 + num2; | |
} | |
} |
Now that we have implemented these interfaces, next we see outlines several examples to show how to use this implementation. The first example below tries to use the Add
method without interface reference.
Calculator calc = new Calculator(); | |
calc.Add(); // Uncomment it to get the Compile time Error |
Therefore, it gets a compile time error as the implementation is private and can only be accessed via interface reference as follows.
ISimpleCalculator simpleCalc = calc; | |
int result = simpleCalc.Add(5, 10); // returns 15 |
As we have notice that the both interfaces have Add
as a member. In fact, Calculator
class also implements both Add
method via polymorphic references. Next example shows how to invoke ICalculator.Add
by using an instance of Calculator
.
ICalculator floatingNumberCalculator = calc; | |
floatingNumberCalculator.Add(3.2 ,5.8); |
To sum up, the key take-aways from this discussion regarding explicit interface implementation are as follows.
It make the whole implementation Abstract/Private . That is , you need the interface reference to access that implementation.
It allow you to implement multiple Interface and at the same time, does not introduce any ambiguity. So, the polymorphic reference or runtime binding can be implement very efficiently.
We highly appreciate any comment or query regarding this post. Thanks!
See More
[2] http://www.dev102.com/2008/04/08/4-key-differences-between-implicit-and-explicit-interface-implementation/
[3] http://blogs.msdn.com/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx
Revisions
[R-1: 02-04-2013] Updated formatting to make this post more consistent with current CSS.
Thanks for information.
many interesting things
Celpjefscylc
After reading through the article, I just feel that I really need more information on the topic. Can you share some resources ?
1. http://msdn.microsoft.com/en-us/library/aa288461(VS.71).aspx
2. http://www.dev102.com/2008/04/08/4-key-differences-between-implicit-and-explicit-interface-implementation/
3. http://blogs.msdn.com/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx
Hope that helps :)
Regards,
Adil