Difference Between Sealed Class & Abstract Class in C#

Sealed class vs Abstract class

In C#, both sealed classes and abstract classes play pivotal roles in class inheritance and design. However, they serve distinct purposes and exhibit different characteristics. Let's delve into a comparative analysis of sealed classes and abstract classes, exploring their differences, similarities, and usage scenarios and providing examples to illustrate their concepts.

1. Definition

  • Abstract Class

    An abstract class in C# is a class that cannot be instantiated on its own and is intended to be a base class for other classes. It may contain abstract methods that must be implemented by derived classes.
  • Sealed Class

    A sealed class in C# is a class that cannot be inherited. Once marked as sealed, it prevents other classes from deriving from it, providing a finalized and unmodifiable design.

2. Inheritance

  • Abstract Class

    Abstract classes are designed for inheritance, serving as blueprints for deriving new classes. They define a common interface and behavior that derived classes must implement.
  • Sealed Class

    Sealed classes, on the other hand, prohibit inheritance. Once a class is marked as sealed, it cannot serve as a base class for other classes.

3. Completeness

  • Abstract Class

    Abstract classes often represent incomplete or partially implemented designs. They define the structure and behavior that derived classes must adhere to, allowing for variation in implementations.
  • Sealed Class

    Sealed classes represent finalized designs. Once sealed, the class is complete and not intended for further extension or modification. It provides a definitive implementation of a class.

4. Usage Scenarios

  • Abstract Class

    Abstract classes are used when you want to define a common interface for a group of related classes. They provide a template or blueprint for inheritance, allowing for polymorphic behavior.
  • Sealed Class

    Sealed classes are employed when you want to prevent further inheritance and modification of a class. They are useful for finalizing the design of a class and ensuring its integrity and stability.

5. Flexibility

  • Abstract Class

    Abstract classes offer flexibility through inheritance and polymorphism. They allow for variation in implementations by providing a common interface for derived classes.
  • Sealed Class

    Sealed classes enforce a strict and final design. Once sealed, the class cannot be extended or modified, providing a clear indication of its intended use and behavior.

6. Code Example. Abstract Class

abstract class Shape
{
    public abstract double Area();
    public virtual void Draw()
    {
        Console.WriteLine("Drawing shape");
    }
}

class Circle : Shape
{
    public double Radius { get; set; }

    public override double Area()
    {
        return Math.PI * Radius * Radius;
    }
}

Code example. Sealed Class

sealed class Logger
{
    public void Log(string message)
    {
        Console.WriteLine($"Logging: {message}");
    }
}

Sealed Classes and Abstract Classes

Here's a comparison of sealed classes and abstract classes in table format:

Aspect Abstract Class Sealed Class
Definition A class that cannot be instantiated and provides a blueprint for other classes. It may contain abstract methods. A class that cannot be inherited, providing a finalized design.
Inheritance Designed for inheritance, serving as blueprints for deriving new classes. Prohibits inheritance; once sealed, it cannot serve as a base class.
Completeness Often represents incomplete designs; defines structure and behavior for derived classes. Represents finalized designs; complete and not intended for extension.
Usage Scenarios Used to define a common interface for related classes, allowing polymorphism. Used to prevent further inheritance and modification, ensuring integrity.
Flexibility Offers flexibility through inheritance and polymorphism, allowing variation in implementations. Enforces a strict and final design, providing clarity and stability.
Example abstract class Shape { /* Definition */ } class Circle : Shape { /* Implementation */ } sealed class Logger { /* Definition */ }


Conclusion

Sealed classes and abstract classes serve different purposes in C# class design. Abstract classes provide a flexible template for inheritance and polymorphism, allowing for variation in implementations. On the other hand, sealed classes offer a finalized design, prohibiting further inheritance and modification to ensure integrity and stability. Understanding the distinctions between sealed and abstract classes is essential for designing maintainable, scalable, and robust C# applications. By leveraging their respective features effectively, developers can create well-structured and extensible codebases that meet the requirements of their applications.


Similar Articles