I made this small program to demonstrate to myself an example of interface. I wanted to confirm whether it is correct and if there is anything more I should know about interfaces other than the importance of implementing polymorphism and multiple inheritance.

\$\begingroup\$If you want to know more about interfaces, Code Review is not the right site.\$\endgroup\$
– svickFeb 23 '13 at 16:14

\$\begingroup\$Why is that? I am just asking my example to be reviewed.\$\endgroup\$
– lbrahimFeb 23 '13 at 16:17

3

\$\begingroup\$But you asked for more than that. “are there anything more I should know about interfaces” That doesn't have anything to do with reviewing your code.\$\endgroup\$
– svickFeb 23 '13 at 16:19

It demonstrates that different types of animals can be treated the same way, but behave differently. This is what polymorphism is about. The word means many (poly) shapes or forms (morph). You can add different types of animals to a collection.

The PrintAnimals method has a parameter of type IEnumerable<IAnimal> allowing you to pass it different types of collections (arrays, lists, linked lists, stacks and many more, as yet another example of polymorphism). It uses a unique Console.WriteLine statement for all types of animals, without even knowing of which type an animal really is. The only thing it knows is, that it implements IAnimal. You could even add new types of animals later, without having to change the PrintAnimals method and it would still work as expected.

\$\begingroup\$Could you please elaborate a bit how this demonstrates more of interface?\$\endgroup\$
– lbrahimFeb 23 '13 at 17:10

2

\$\begingroup\$Your example accesses the cat through a variable of type Cat and the dog through Dog. This would work, even if both classes did not implement the interface. Inheritance is not involved. My PrintAnimals method does not need to know the Cat and Dog classes. PrintAnimals could be defined in a different assembly where Cat and Dog are not accessible (if they are not public). Both, cats and dogs, are accessed through the same variable IAnimal animal. You could even add a new kind of animal later. PrintAnimals would still work without any changes and without recompilation.\$\endgroup\$
– Olivier Jacot-DescombesFeb 23 '13 at 17:24

\$\begingroup\$"Polymorphism is the ability of derived classes inheriting from the same base class to respond to the same method call in their own unique way" -Beginning C# OOP By Dan Clark. So, in my example, I inherited from IAnimal and had different implementation of Cry depending on the class (Dog,Cat). So, is not that all? Why is it important to have a PrintAnimal method to demonstrate Polymorphism?\$\endgroup\$
– lbrahimFeb 24 '13 at 4:24

\$\begingroup\$Your example does not respond to the same method call. It responds to Dog.Cry and Cat.Cry. Those are are two different methods. My example always reponds to the same method call IAnimal.Cry. You wrote Dog oDog = new Dog();. If you changed it to IAnimal oDog = new Dog();, you would be responding to the same method call.\$\endgroup\$
– Olivier Jacot-DescombesFeb 24 '13 at 18:46

You shouldn't use variable names like oDog. If the o is meant to indicate that it's an object, then that information already contained in the type of the variable, so the prefix is useless. If it indicates something else, then it's very confusing.

Your code is not a very good example, because it would work exactly the same even without the interface.

\$\begingroup\$Yes, about anything is an object in C#, and thousands of types are available in the class library, making it virtually impossible to find an appropriate prefix for one of them.\$\endgroup\$
– Olivier Jacot-DescombesFeb 23 '13 at 16:24

\$\begingroup\$How would it work exactly the same without interface? Without interface an Animal class would have the Cry() method and it would not vary according to the class it was inherited by e.g.Dog and Cat.\$\endgroup\$
– lbrahimFeb 23 '13 at 16:43

1

\$\begingroup\$@Md.lbrahim There is no Animal class in the code you posted. And the Main() method really doesn't use the interface in any way.\$\endgroup\$
– svickFeb 23 '13 at 16:50

The client expecting the interface (IAnimal) only cares about that interface and not the specific implementation (Dog, Cat, etc). Therefore you could have the PrintAnimal method (maybe class at some point) handle any kind of animal you may happen to want in the future. Your example would work whether you had an interface or not.

Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).