It simplifies the virtual method table. At compile time, it is not possible
to determine the actual method that will be called on a virtual method.
Because of this, the CLR has to do a virtual table lookup. There is some
overhead in doing this. If a class is sealed, then it may be possible to
avoid this. Something like this.
ParentOfSealedClass p = new ParentOfSealedClass();
p.SomeVirtualMethod();
SealedClass s = new ParentOfSealedClass();
s.SomeVirtualMethod();
In this case, when p.SomeVirtualMethod(), it is possible that p could be a
subclass of ParentOfSealedClass and the method call cannot be optimized. But
s.SomeVirtualMethod() can be optimized. SealedClass cannot have children.
The exact methods that are called on an instance of SealedClass are known at
compile time. Because of this, s.SomeVirtualMethod() will be a little faster.
Also keep in mind that you can seal just a method or property in a class.
This will do exactly the same kind of thing, just on a method or property
basis.