Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
Entendiendo clases y métodos sealed en C#
Esta guía explica cómo usar la palabra clave sealed para restringir la herencia y la sobrescritura de métodos en C#, con ejemplos de código prácticos.
Clase sealed
En C#, la palabra clave sealed impide que una clase sea heredada. Una clase sealed nunca puede tener un tipo derivado.
Ejemplo:
using System;
namespace SealedClass {
sealed class Animal { }
// Intentar heredar una clase sealed resulta en error de compilación
class Dog : Animal { }
class Program {
static void Main (string [] args) {
// crear objeto de Dog class
Dog d1 = new Dog();
Console.ReadLine();
}
}
}
El compilador emite:
error CS0509: 'Dog': cannot derive from sealed type 'Animal'
Método sealed
Al sobrescribir un método virtual, puedes querer prevenir más sobrescrituras en clases derivadas. Prefija la declaración override con sealed para lograr esto.
Ejemplo:
using System;
namespace SealedClass {
class Animal {
public virtual void MakeSound() {
Console.WriteLine("Animal Sound");
}
}
class Dog : Animal {
// Sobrescritura sealed
sealed public override void MakeSound() {
Console.WriteLine("Dog Sound");
}
}
class Puppy : Dog {
// Intentar sobrescribir un método sealed causa error de compilación
public override void MakeSound() {
Console.WriteLine("Puppy Sound");
}
}
class Program {
static void Main (string [] args) {
// crear objeto de Puppy class
Puppy d1 = new Puppy();
Console.ReadLine();
}
}
}
Error resultante:
error CS0239: 'Puppy.MakeSound()': cannot override inherited member 'Dog.MakeSound()' because it is sealed
Consejo: Sellando un método sobrescrito se detiene la sobrescritura adicional en una cadena de herencia multinivel.
¿Por qué usar clases sealed?
- Seguridad e integridad – Una clase sealed no puede extenderse, por lo que su comportamiento permanece predecible y no puede ser alterado por subclases.
- Rendimiento – El runtime puede optimizar tipos sealed más agresivamente porque sabe que no hay subclases.
- Tipos de utilidad estática – Muchas bibliotecas exponen miembros estáticos a través de clases sealed (p.ej.,
Pensen System.Drawing).
Por ejemplo, la clase Pens proporciona instancias preconfiguradas de Pen para colores estándar:
Pen bluePen = Pens.Blue; // representa un bolígrafo azul
Como Pens es sealed, sus miembros estáticos no pueden ser sobrescritos o alterados por otros tipos.
Lenguaje C
- ASTM A729 Clase A: Acero Doble Normalizado y Revenido - Propiedades Clave y Estándares
- ASTM A649 Clase 2: Acero Normalizado y Revenido - Especificaciones y Propiedades
- Acero ASTM A288 Clase 4 Temple y Revenido: Especificaciones y Propiedades
- Clases y objetos en C#: Fundamentos para POO robusta
- Dominando clases y métodos abstractos en C#: Guía práctica
- Entendiendo clases y métodos parciales en C#
- Clases y Objetos en C++: Guía Práctica de Programación Orientada a Objetos
- Funciones y clases amigas en C++: dominando el control de acceso
- Herencia en C#: Construyendo código reutilizable y mantenible
- Polimorfismo en C#: Enlace estático vs dinámico explicado
- Domina Java: Entendiendo Objetos, Clases y Conceptos Básicos de POO