sealed class and sealed method in C# -Sealed class cannot be inherited and sealed method in C# programming cannot be overridden. If we need to stop a method to be overridden or further extension of a class in inheritance hierarchy, we need to use Sealed method and Sealed class respectively in C# object oriented programming.
Sealed class in C# with example:
A sealed class cannot be inherited. Means, no class can be derived from a sealed class. To make a class sealed, we use the keyword sealed in class declaration. For example, if we seal class A as below source code then class B cannot be derived from it. One question arises immediately that can we create object of sealed class in C# program? Answer is, of course we can create object of sealed class. Purpose of sealed class is only to prevent a class to be inherited.
sealed class A{
}
//if we derive B from A we will get
//compiler error :'B': cannot derive from sealed type 'A'
class B : A
{
}
Sealed method example:
In below source code example class B will seal the X(), so, it cannot be overridden / Implemented in class C and class C will use the same X() of class B.
class A
{
public virtual void X()
{
Console.WriteLine("A::X()");
}
public virtual void Y()
{
Console.WriteLine("A::Y()\n");
}
}
class B : A
{
sealed public override void X()
{
Console.WriteLine("B::X()");
}
public override void Y()
{
Console.WriteLine("B::Y()\n");
}
}
//This C class can not overrid X()
//as it is sealed in B class.
//C will use class B, same X()implementation
//and it cannot implements it's own.
class C : B
{
//Can not override X function or else
//compiler error : 'C.X()': cannot override inherited member
//'B.X()' because it is sealed.
//sealed public virtual void X()
//{
// Console.WriteLine("B::X()");
//}
public override void Y()
{
Console.WriteLine("C::Y()");
}
}
//--------------------TEST------------------------------------
class SealedClassAndMethodTest
{
static void Main(string[] args)
{
A a = new A();
a.X();
a.Y();
B b = new B();
b.X();
b.Y();
C c = new C();
c.X();
c.Y();
}
}
Output:
A::X()
A::Y()
B::X()
B::Y()
B::X()
C::Y()
IMPORTANT NOTE:
- It is not necessary that a sealed class should also contain sealed method. As, sealed class itself means that no class can be derived or extended from it, so, there is no question that a method can be overridden and implemented by derived class. Hence, there is no sense of having sealed method it.
- Any method can be sealed in the normal class which allow extension, so no derived class can override its own implementation. In very simple word, if I don’t allow a derived class to override it accidentally and write his own definition, I will make it sealed. “Accidentally”, I said because if you can remove the sealed keyword in base class method and override it in your derived class but you will think of the intention of making it sealed and act accordingly in the program. By the way this is the best practice.
- Sealed class and sealed method in C# programming is used to stop a developer to extend a class or override a method accidentally. If he does so, C# compiler will flash an error. If he really wants to extend or override he can remove the sealed keyword in C# program.
Recommendation:
Read the real time example uses of sealed class and sealed method in C#