Abstract

Abstract Class

  • A class declared as abstract can never be instantiated. Instead, only its concrete subclasses can be instantiated.
  • Specifies method signatures but lacks implementation.
  • It is used as a template for derived classes(base class).
  • Abstract class can have abstract and virtual members.
  • The subclass must provide implementation unless declared abstract

Link to Example

Abstract Methods

  • Abstract members cannot be private.
  • Abstract methods are implicitly virtual.
using System;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
           
           new Stock { SharesOwned = 200, CurrentPrice = 123.45M }.NetValue.Dump();
        }       

    }
    
        public abstract class Asset
        {
            public abstract decimal NetValue { get; }
        }

        public class Stock : Asset
        {
            public long SharesOwned;
            public decimal CurrentPrice;
            
            //override virtual method
            public override decimal NetValue => CurrentPrice * SharesOwned;
           
        }
    
}

Abstract Properties

//Abstract Class with abstract properties
abstract class absClass
{
    protected int myNumber;
    public abstract int numbers
    {
        get;
        set;
    }
}

class absDerived:absClass
{
    //Implementing abstract properties
    public override int numbers
    {
        get
        {
            return myNumber;
        }
        set
        {
            myNumber = value;
        }
    }
}

Rules:

  • Abstract class cannot be sealed.
  • Abstract methods are only allowed in abstract classes.
  • Abstract methods cannot be private.
  • Access modifier of the abstract method should be same in both abstract class and its derived class.
  • Abstract member cannot be static.
  • Abstract method cannot have virtual modifier.

Read more about Interface vs Abstract in Interface article.

Leave a Reply

Your email address will not be published. Required fields are marked *