Abstract classes are the way to achieve abstraction in C#. Abstraction in C# is the process to hide the internal details and showing functionality only. Abstraction can be achieved by two ways:
Abstract class and interface both can have abstract methods which are necessary for abstraction.
A method which is declared abstract and has no body is called abstract method. It can be declared inside the abstract class only. Its implementation must be provided by derived classes. For example:
public abstract void draw();
An abstract method in C# is internally a virtual method so it can be overridden by the derived class. You can’t use static and virtual modifiers in abstract method declaration.
In C#, abstract class is a class which is declared abstract. It can have abstract and non-abstract methods. It cannot be instantiated. Its implementation must be provided by derived classes. Here, derived class is forced to provide the implementation of all the abstract methods.
Let’s see an example of abstract class in C# which has one abstract method draw(). Its implementation is provided by derived classes: Rectangle and Circle. Both classes have different implementation.
using System; public abstract class Shape { public abstract void draw(); } public class Rectangle : Shape { public override void draw() { Console.WriteLine("drawing rectangle..."); } } public class Circle : Shape { public override void draw() { Console.WriteLine("drawing circle..."); } } public class TestAbstract { public static void Main() { Shape s; s = new Rectangle(); s.draw(); s = new Circle(); s.draw(); } }
Output:
drawing ractangle... drawing circle...
Interface in C# is a blueprint of a class. It is like abstract class because all the methods which are declared inside the interface are abstract methods. It cannot have method body and cannot be instantiated.
It is used to achieve multiple inheritance which can’t be achieved by class. It is used to achieve fully abstraction because it cannot have method body.
Its implementation must be provided by class or struct. The class or struct which implements the interface, must provide the implementation of all the methods declared inside the interface.
Let’s see the example of interface in C# which has draw() method. Its implementation is provided by two classes: Rectangle and Circle.
using System; public interface Drawable { void draw(); } public class Rectangle : Drawable { public void draw() { Console.WriteLine("drawing rectangle..."); } } public class Circle : Drawable { public void draw() { Console.WriteLine("drawing circle..."); } } public class TestInterface { public static void Main() { Drawable d; d = new Rectangle(); d.draw(); d = new Circle(); d.draw(); } }
Output:
drawing ractangle... drawing circle...
Note: Interface methods are public and abstract by default. You cannot explicitly use public and abstract keywords for an interface method.
Try the following example in the editor below.
Given an interface Math , inherit it and override the Operation method to return the sum of two numbers.