Abstract classes and Interfaces

Abstract Class

Abstract are classes that cannot be instantiated, and are frequently either partially implemented, or not at all implemented. Abstract classes are useful when creating components because they allow you specify an invariant level of functionality in some methods, but leave the implementation of other methods until a specific implementation of that class is needed. When implementing an abstract class, you must implement each abstract method in that class, and each implemented method must receive the same number and type of arguments, and have the same return value, as the method specified in the abstract class. Classes can inherit from only one abstract class.


An interface is a reference type and it contains only abstract members. We cannot have any implementation code in the interface. The interface contains only declaration for its members. Interface’s members can be events, methods, properties and indexers. An interface is also known as a “contract”. The entire client which uses the interface must fulfill the contract by implementing the interface. A class can implement multiple interfaces.

Decide between Abstract class and Interface: If you want to provide common, implemented functionality among all implementations of your component, use an abstract class. Abstract classes allow you to partially implement your class, whereas interfaces contain no implementation for any members. If the functionality you are creating will be useful across a wide range of disparate objects, use an interface. Abstract classes should be used primarily for objects that are closely related, whereas interfaces are best suited for providing common functionality to unrelated classes. Below is how interface and abstract classes are used in project. In order to define a interface we use the interface keyword and to define abstract class we use the abstract keyword.

public interface iEmployee
{ }
public abstract class clsEmployee : iEmployee
public clsEmployee()
{ } }