Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Abstract classes and methods in C#

2.46/5 (17 votes)
15 Jun 2006 1   625  
A Detailed Analysis of Abstract classes and methods in C#

Introduction

A detailed analysis of Abstract classes and methods in C# with some concrete examples.

The keyword abstract can be used with both classes and methods in C# to declare them as abstract.

The classes, which we can't initialize, are known as abstract classes. They provide only partial implementations. But another class can inherit from an abstract class and can create their instances. You need to mark class members that have no implementation with the abstract modifier. ou also need to label a class containing such members as abstract. A class with abstract members cannot be instantiated with the new operator. You can derive both abstract and non-abstract classes from an abstract base class. Interfaces are implicitly abstract.

They cannot be instantiated, and must be implemented by a non-abstract class. Therefore, you cannot mark interfaces and their members as abstract. You may not combine the abstract modifier with the other inheritance modifier, final. You may not combine either of these inheritance modifiers (abstract and final) with the static modifier.

See the below examples,

Example 1

C#
namespace Abstract
{
 /// <summary>
 /// an abstract class with a non-abstract method
 /// </summary>
 
 abstract class MyAbs
 {
  public void NonAbMethod()
  {
   Console.WriteLine("Non-Abstract Method");
  }
 }

 class MyClass : MyAbs
 {
 }

 class Class1
 {
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //MyAbs mb = new MyAbs();//not possible to create an instance
   MyClass mc = new MyClass();
   mc.NonAbMethod(); // Displays 'Non-Abstract Method'
  }
 }
}
C#
namespace Abstract2
{
 /// <summary>
 /// An abstract method is a method without any method body.
 /// They are implicitly virtual in C#.
 /// </summary>
 
 abstract class MyAbs
 {
  public void NonAbMethod()
  {
   Console.WriteLine("Non-Abstract Method");
  }
  public abstract void AbMethod(); // An abstract method
 }

 class MyClass : MyAbs//must implement base class abstract methods
 {
  public override void AbMethod()
  {
   Console.WriteLine("Abstarct method");
  } 
 }

 class Class1
 {
  /// <summary>
  /// The main entry point for the application.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   MyClass mc = new MyClass();
   mc.NonAbMethod();
   mc.AbMethod();
  }
 }
}

For more examples, please see the attachment.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here