Skip to main content

Difference between Abstract Class and Interface with example in c#


1. Multiple inheritance

 A class may inherit several interfaces.
 class abc : ICrud,IDisposal

 A class may inherit only one abstract class.
 class abc : parentClass

2. Default implementation

Interface: An interface cannot provide any code, just the signature.
Example:

interface IPerson
    {
        void Add(string name, string email);
    }
   
Abstract class: An abstract class can provide complete, default code and/or just the details that have to be overridden.
Example:

abstract class APerson
    {
        //
        string Name;
        string Email;

       // like interface
       public abstract void Add(string name, string email);
      
       public void Update()
       {

       }

    }

3. Access Modifiers


Interface: An interface cannot have access modifiers for the subs, functions, properties etc everything is assumed as public

    interface IPerson
    {
        void Add(string name, string email);
    }

    class iPerson : IPerson
    {
        string Name;
        string Email;

        public void Add(string name, string email)
        {
            Email = email;
            Name = name;
        }
    }

Abstract Class: An abstract class can contain access modifiers for the subs, functions, properties

abstract class APerson
    {
        //
        protected string Name;
        protected string Email;

        // like interface
        protected abstract void Add(string name, string email);

        protected void Update()
        {

        }

    }

    class person : APerson
    {
        protected override void Add(string name, string email)
        {
            Email = email;
            Name = name;
        }
    }

4. Where to Use

Interface: If various implementations only share method signatures then it is better to use Interfaces.

Abstract Class: If various implementations are of the same kind and use common behaviour or status then abstract class is better to use.

5. Speed

Interface: Requires more time to find the actual method in the corresponding classes.

Abstract Class: Faster then Interface

Comments

Popular posts from this blog

Create Strong Name Assembly

From a VS.NET command prompt, enter the following: 1. Generate a KeyFile sn -k keyPair.snk 2. Get the MSIL for the assembly ildasm SomeAssembly.dll /out:SomeAssembly.il 3. Rename the original assembly, just in case ren SomeAssembly.dll SomeAssembly.dll.orig 4. Build a new assembly from the MSIL output and your KeyFile ilasm SomeAssembly.il /dll /key= keyPair.snk   more read visit : http://www.geekzilla.co.uk/ViewCE64BEF3-51A6-4F1C-90C9-6A76B015C9FB.htm

Sql Helper into Xamarin Forms PCL Project

public abstract class SQLiteConnection : IDisposable { public string DatabasePath { get ; private set ; } public bool TimeExecution { get ; set ; } public bool Trace { get ; set ; } public SQLiteConnection ( string databasePath) { DatabasePath = databasePath; } public abstract int CreateTable < T > (); public abstract SQLiteCommand CreateCommand ( string cmdText, params object [] ps); public abstract int Execute ( string query, params object [] args); public abstract List < T > Query < T > ( string query, params object [] args) where T : new (); public abstract TableQuery < T > Table < T > () where T : new (); public abstract T Get < T > ( object pk) where T : new (); public bool IsInTransaction { get ; protected set ; } public abstract void BeginTransaction (); public abstract void Rollback (); public abstract void Co