Click here to Skip to main content
14,970,162 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi Experts,

While I reading some blog I read one approach that is used by someone in interface and abstract class but I am not clearly understand that Please help me to find out that.

1)What are benefits of inheriting the interface in abstract class?when we go for this approach?Is it good practice to doing that? Is this really a duplicate of code in both place?

public interface IService
        void Add();
        void Mul();
    //First Case
    public abstract class ServiceOne : IService
        public abstract void Add();
        public abstract void Mul();
    //Second Case
    public abstract class ServiceTwo : IService
        public void Add(){}
        public void Mul(){}

    public class S1 : ServiceOne
        public override void Add(){}
        public override void Mul() {}
    public class S2 : ServiceTwo
    { }

So in above example we have a IService interface and having two method add() and mul().And Same method is inheriting in (Case 1) abstract class Serviceone and again its abstract method here in (case 2) inheriting in abstract class ServiceTwo but provide the implementation of interface method.


What I have tried:

What are basic benefits of doing that duplication of code in interface and abstract class.
Updated 13-Dec-16 22:29pm
[no name] 13-Dec-16 20:26pm
There is no duplicate. Interfaces do not contain code. The interface is a contract not an implementation.
Er. Dinesh Sharma 13-Dec-16 20:34pm
When we need this approach same method in interface and same in abstract class that inherited it.

If the abstract classes merely reproduce the signature of the interface (as in your scenario) then it is nearly useless. Generally speaking, the abstract class does augment interface signature or provide some implementation. Such features make it useful.
I wouldn't do such a thing unless IService was already defined and used elsewhere for some other purpose. If you want to take an existing interface and make an abstract class implement it that is fine I guess. As mentioned already though, if the interface is defined solely for the purpose of defining the methods of the abstract class then it's pointless. The only caveat to that might be if you were only interested in a sub-set of methods somewhere. So IService might have "Add" and "Delete" but the abstract class might also have "Sort", "Reverse" etc, and you might have other classes that are only interested in objects that use "Add" and "Delete" so you could pass objects that implement IService to that object.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900