Abstract classes are a type of class in C# that contains a base class implementation. The abstract class is not instantiated, and are inherited by subclasses to provide a detailed implementation.
Consider the example below. We have an abtract class called Vehicle in our console app. We try to create an instance of the abtract class Vehicle:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Carl.AbstractClass { class Program { abstract class Vehicle { public int wheels { get; set; } public abstract int GetWheels(); } static void Main(string[] args) { try { Vehicle car = null; car.wheels = 4; Console.WriteLine("Vehicle has {0} wheels", car.wheels); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }
Though the code will compile, we will get an error when running the code:
In order to use the abtract class, we can create a derived class, such as Car in this example. Note when you derive from the abstract class, Visual Studio provides help on what to implement:
We will add code to our Car class, with an overrride on the GetWheels method.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Carl.AbstractClass { class Program { abstract class Vehicle { public int wheels { get; set; } public abstract int GetWheels(); } class Car : Vehicle { public override int GetWheels() { return wheels; } } static void Main(string[] args) { try { Car ferrari = new Car(); ferrari.wheels = 4; Console.WriteLine("Vehicle has {0} wheels", ferrari.GetWheels()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); } } }
When run, this produces:
Note abstract classes can contain implementation. For example, we could have a method HowManyWheels in our abstract class, which returns a string:
abstract class Vehicle { public int wheels { get; set; } public abstract int GetWheels(); public string HowManyWheels() { return string.Format("There are {0} wheels", wheels); } }
This is different from interfaces in C#, in which this implementation cannot be provided.
I AM SPENDING MORE TIME THESE DAYS CREATING YOUTUBE VIDEOS TO HELP PEOPLE LEARN THE MICROSOFT POWER PLATFORM.
IF YOU WOULD LIKE TO SEE HOW I BUILD APPS, OR FIND SOMETHING USEFUL READING MY BLOG, I WOULD REALLY APPRECIATE YOU SUBSCRIBING TO MY YOUTUBE CHANNEL.
THANK YOU, AND LET'S KEEP LEARNING TOGETHER.
CARL