Dominando Classes e Métodos Sealed em C#: Quando Usar, Exemplos Claros e Segurança de Código
Entendendo Classes e Métodos Sealed em C#
Este guia explica como usar a palavra-chave sealed para restringir herança e sobrescrita de métodos em C#, com exemplos práticos de código.
Classe Sealed
Em C#, a palavra-chave sealed impede que uma classe seja herdada. Uma classe sealed nunca pode ter um tipo derivado.
Exemplo:
using System; namespace SealedClass { sealed class Animal { } // Tentar herdar uma classe sealed resulta em erro de compilação class Cachorro : Animal { } class Program { static void Main (string [] args) { // cria um objeto da classe Cachorro Cachorro d1 = new Cachorro(); Console.ReadLine(); } } }
O compilador emite:
error CS0509: 'Cachorro': cannot derive from sealed type 'Animal'
Método Sealed
Ao sobrescrever um método virtual, você pode querer impedir mais sobrescritas em classes derivadas. Prefixe a declaração override com sealed para alcançar isso.
Exemplo:
using System; namespace SealedClass { class Animal { public virtual void EmitirSom() { Console.WriteLine("Som de Animal"); } } class Cachorro : Animal { // Sobrescrita sealed sealed public override void EmitirSom() { Console.WriteLine("Som de Cachorro"); } } class Filhote : Cachorro { // Tentar sobrescrever um método sealed causa erro de compilação public override void EmitirSom() { Console.WriteLine("Som de Filhote"); } } class Program { static void Main (string [] args) { // cria um objeto da classe Filhote Filhote d1 = new Filhote(); Console.ReadLine(); } } }
Erro resultante:
error CS0239: 'Filhote.EmitirSom()': cannot override inherited member 'Cachorro.EmitirSom()' because it is sealed
Dica: Selar um método sobrescrito impede mais sobrescritas em uma cadeia de herança multinível.
Por Que Usar Classes Sealed?
- Segurança e Integridade – Uma classe sealed não pode ser estendida, então seu comportamento permanece previsível e não pode ser alterado por subclasses.
- Performance – O runtime pode otimizar tipos sealed mais agressivamente porque sabe que não há subclasses.
- Tipos Utilitários Estáticos – Muitas bibliotecas expõem membros estáticos através de classes sealed (ex:
Pensem System.Drawing).
Por exemplo, a classe Pens fornece instâncias pré-configuradas de Pen para cores padrão:
Pen canetaAzul = Pens.Blue; // representa uma caneta azul
Como Pens é sealed, seus membros estáticos não podem ser sobrescritos ou alterados por outros tipos.
Linguagem C
- Classes e Objetos em C#: Fundamentos para POO Robusta
- Dominando Classes e Métodos Abstratos em C#: Guia Prático
- Entendendo Classes e Métodos Parciais em C#
- Classes e Objetos em C++: Guia Prático de Programação Orientada a Objetos
- Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
- Dominando Java: Entendendo Objetos, Classes e Conceitos Fundamentais de POO
- Dominando Herança em C#: Construa Código Reutilizável e Manutenível
- Polimorfismo em C#: Binding Estático vs Dinâmico Explicado
- ASTM A729 Classe A: Aço Duplamente Normalizado e Revenido - Propriedades e Normas
- ASTM A649 Classe 2: Aço Normalizado e Revenido - Especificações e Propriedades