Classes seladas em C# (Como funciona para desenvolvedores)
No mundo da programação orientada a objetos, a linguagem C# oferece aos desenvolvedores um conjunto versátil de ferramentas para projetar e implementar softwares robustos. Uma dessas características que adiciona uma camada extra de controle à herança de classes é o conceito de classe selada. Classes seladas oferecem uma maneira única de restringir a hierarquia de herança, proporcionando um nível de segurança e encapsulamento que pode ser benéfico em determinados cenários. Neste artigo, vamos nos aprofundar nas complexidades das classes seladas em C# e também explorar o pacote NuGet IronPDF da Iron Software .
O que são classes seladas e métodos selados?
Classe selada: Em C#, uma classe selada é uma classe que não pode ser herdada. Ao usar a palavra-chave sealed, os desenvolvedores podem impedir que outras classes derivem ou estendam a classe selada. Essa restrição deliberada garante que a classe selada não possa ser usada como classe base para nenhuma outra classe, limitando o escopo da hierarquia de herança. Classes seladas são frequentemente empregadas quando um desenvolvedor deseja controlar e finalizar a estrutura de uma classe, impedindo modificações não intencionais por meio de herança.
Considere o seguinte exemplo:
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
// The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited:
// public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal'
// {
// }
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
// The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited:
// public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal'
// {
// }
Public NotInheritable Class Animal
Public Property Species() As String
Public Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
' The following code will cause a compilation error because 'Animal' is sealed and cannot be inherited:
' public class Dog : Animal // Error: Cannot inherit from sealed class 'Animal'
' {
' }
Ao contrário das structs, que são implicitamente seladas, a classe selada precisa ser declarada usando a palavra-chave sealed, como mostrado acima. Neste exemplo, a classe Animal é declarada como selada, tornando impossível que qualquer outra classe herde dela.
Método selado: Além de selar classes inteiras, o C# também permite que os desenvolvedores selem métodos individuais dentro de uma classe. Um método selado é um método que nenhuma classe derivada pode sobrescrever. Isso garante que o comportamento do método permaneça consistente em todas as subclasses, proporcionando um nível de previsibilidade na lógica da aplicação.
Para selar um método, use o modificador sealed:
public class Animal
{
public string Species { get; set; }
// A virtual method allows derived classes to override it.
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
// The sealed override prevents further overriding of this method.
public sealed override void MakeSound()
{
Console.WriteLine("Bark!");
}
}
public class Animal
{
public string Species { get; set; }
// A virtual method allows derived classes to override it.
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal
{
// The sealed override prevents further overriding of this method.
public sealed override void MakeSound()
{
Console.WriteLine("Bark!");
}
}
Public Class Animal
Public Property Species() As String
' A virtual method allows derived classes to override it.
Public Overridable Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
End Class
Public Class Dog
Inherits Animal
' The sealed override prevents further overriding of this method.
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Bark!")
End Sub
End Class
A palavra-chave virtual permite que o método seja sobrescrito em classes derivadas, enquanto a palavra-chave sealed impede a sobrescrita do método virtual da classe base em quaisquer subclasses subsequentes.
Classes seladas e membros de classe: Classes seladas também podem incluir membros selados, como propriedades, métodos e eventos. Essa combinação de classe selada e membros selados garante um alto grau de controle sobre o comportamento e a estrutura da classe.
Considere o seguinte exemplo:
public sealed class ControlledClass
{
// A sealed property that prevents overriding.
public sealed string ControlledProperty { get; set; }
// A method that cannot be redefined by derived classes.
public virtual sealed void ControlledMethod()
{
// Method implementation
Console.WriteLine("Executing controlled method.");
}
// A sealed event that cannot be subscribed to or raised by derived classes.
public sealed event EventHandler ControlledEvent;
// Sealed indexers, if applicable
public sealed string this[int index]
{
get { return "Value"; }
set
{
// Setter implementation
}
}
}
public sealed class ControlledClass
{
// A sealed property that prevents overriding.
public sealed string ControlledProperty { get; set; }
// A method that cannot be redefined by derived classes.
public virtual sealed void ControlledMethod()
{
// Method implementation
Console.WriteLine("Executing controlled method.");
}
// A sealed event that cannot be subscribed to or raised by derived classes.
public sealed event EventHandler ControlledEvent;
// Sealed indexers, if applicable
public sealed string this[int index]
{
get { return "Value"; }
set
{
// Setter implementation
}
}
}
Public NotInheritable Class ControlledClass
' A sealed property that prevents overriding.
Public NotOverridable Property ControlledProperty() As String
' A method that cannot be redefined by derived classes.
Public Overridable NotOverridable Sub ControlledMethod()
' Method implementation
Console.WriteLine("Executing controlled method.")
End Sub
' A sealed event that cannot be subscribed to or raised by derived classes.
Public Event ControlledEvent As EventHandler
' Sealed indexers, if applicable
Default Public NotOverridable Property Item(ByVal index As Integer) As String
Get
Return "Value"
End Get
Set(ByVal value As String)
' Setter implementation
End Set
End Property
End Class
Neste exemplo, todos os aspectos do ControlledClass são selados – a propriedade, o método, o evento e até mesmo um indexador, se aplicável. Este nível de vedação proporciona uma estrutura robusta e inalterável, ideal para cenários em que o design da classe deve permanecer fixo.
A lógica por trás das classes seladas
Segurança do código: Classes seladas contribuem para a segurança do código, impedindo o acesso e a modificação não autorizados. Quando uma classe é selada, ela funciona como uma entidade fechada com uma interface e um comportamento bem definidos. Esse encapsulamento minimiza o risco de efeitos colaterais ou alterações indesejadas que possam comprometer a estabilidade e a segurança da base de código.
Integridade do projeto: Em bases de código ou frameworks maiores, manter a integridade do projeto é fundamental. Uma classe selada funciona como um bloco de construção fundamental com estruturas fixas, reduzindo as chances de modificações não intencionais. Isso é particularmente benéfico em cenários onde uma classe serve como componente central de um sistema e seu comportamento deve permanecer consistente em diferentes módulos.
Melhores práticas para usar classes seladas
- Use a classe Selada com moderação: Embora a classe Selada ofereça benefícios, eles devem ser empregados criteriosamente. O uso excessivo de classes seladas pode levar a um código rígido e menos fácil de manter.
- Documentar a intenção: Ao selar uma classe ou método, é crucial documentar a intenção por trás dessa decisão. Explique por que uma determinada classe é selada e quais considerações de projeto levaram a essa escolha.
- Considere a extensibilidade futura: Antes de selar uma classe, considere se requisitos futuros podem exigir extensibilidade. Se houver probabilidade de uma classe precisar ser estendida, selá-la pode dificultar o desenvolvimento futuro.
- Use métodos selados para estabilidade: Os métodos selados podem ser benéficos quando o comportamento principal de um método deve permanecer estável em diferentes subclasses. Isso pode melhorar a previsibilidade do código.
- Não pode ser abstrata: Uma classe selada/métodos selados não podem ser também uma classe abstrata/métodos abstratos, pois as classes abstratas são projetadas para serem herdadas por outras classes, enquanto as classes seladas restringem a herança.
Apresentando o IronPDF

IronPDF é uma biblioteca C# para PDF da Iron Software , sendo um gerador e leitor de PDF moderno.
Instalação
O IronPDF pode ser instalado usando o console do Gerenciador de Pacotes NuGet ou o gerenciador de pacotes do Visual Studio. Abaixo está o comando para o console:
Install-Package IronPdf
Ou, para instalar o IronPDF usando o Gerenciador de Pacotes NuGet , pesquise "IronPDF" na barra de pesquisa do Gerenciador de Pacotes NuGet .

IronPDF e Classes Seladas
Em conjunto, a palavra-chave sealed e o IronPDF podem ser usados para impedir que uma biblioteca de subclasse ou uma biblioteca derivada sobrescreva membros herdados e também para gerar PDFs.
namespace OrderBy
{
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Base class
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public virtual void Print()
{
Console.WriteLine("Generic animal Print");
}
}
public class Dog : Animal
{
// Sealed override ensures method cannot be overridden in further derived classes.
public sealed override void MakeSound()
{
Console.WriteLine("Bark!");
}
public sealed override void Print()
{
var pdfRenderer = new ChromePdfRenderer();
string content = @"
<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>";
pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf");
}
}
}
namespace OrderBy
{
public class Program
{
static void Main()
{
Console.WriteLine("Demo Sealed Class and IronPdf");
var dog = new Dog();
dog.MakeSound();
dog.Print();
}
}
// Base class
public class Animal
{
public string Species { get; set; }
public virtual void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
public virtual void Print()
{
Console.WriteLine("Generic animal Print");
}
}
public class Dog : Animal
{
// Sealed override ensures method cannot be overridden in further derived classes.
public sealed override void MakeSound()
{
Console.WriteLine("Bark!");
}
public sealed override void Print()
{
var pdfRenderer = new ChromePdfRenderer();
string content = @"
<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>";
pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf");
}
}
}
Namespace OrderBy
Public Class Program
Shared Sub Main()
Console.WriteLine("Demo Sealed Class and IronPdf")
Dim dog As New Dog()
dog.MakeSound()
dog.Print()
End Sub
End Class
' Base class
Public Class Animal
Public Property Species() As String
Public Overridable Sub MakeSound()
Console.WriteLine("Generic animal sound")
End Sub
Public Overridable Sub Print()
Console.WriteLine("Generic animal Print")
End Sub
End Class
Public Class Dog
Inherits Animal
' Sealed override ensures method cannot be overridden in further derived classes.
Public NotOverridable Overrides Sub MakeSound()
Console.WriteLine("Bark!")
End Sub
Public NotOverridable Overrides Sub Print()
Dim pdfRenderer = New ChromePdfRenderer()
Dim content As String = "
<!DOCTYPE html>
<html>
<body>
<h1>Hello, Dog!</h1>
<p>This is Print from Derived class.</p>
<p>Print Animal Dog</p>
<p>Print Animal Sound: Bark</p>
</body>
</html>"
pdfRenderer.RenderHtmlAsPdf(content).SaveAs("dog.pdf")
End Sub
End Class
End Namespace

Abaixo está o PDF gerado pelo IronPDF.

Licenciamento (Teste Gratuito Disponível)
IronPDF . Essa chave precisa ser inserida no arquivo appsettings.json.
{
"IronPdf.LicenseKey": "your license key"
}
Forneça seu e-mail para obter uma licença de avaliação.
Conclusão
As classes seladas em C# oferecem aos desenvolvedores um mecanismo poderoso para controlar a hierarquia de herança e garantir que determinadas classes e seus membros não possam ser estendidos ou sobrescritos. Embora o uso de classes seladas deva ser cuidadosamente considerado, elas fornecem um meio eficaz de encapsular funcionalidades e evitar modificações não intencionais. Ao compreender o conceito de classes e métodos selados, os desenvolvedores podem tomar decisões informadas sobre quando e onde aplicar essa restrição, contribuindo para a criação de sistemas de software sustentáveis, seguros e previsíveis. Juntamente com o IronPDF, também podemos imprimir documentos PDF.
Perguntas frequentes
Como funciona uma classe selada em C#?
Em C#, uma classe selada é definida usando a palavra-chave sealed . Isso impede que outras classes herdem dela, garantindo que a implementação da classe permaneça inalterada.
Por que os desenvolvedores devem usar classes seladas em C#?
Classes seladas são usadas para manter a integridade do código, impedindo a herança. Isso garante que o comportamento da classe permaneça consistente e seguro, especialmente em sistemas maiores onde a integridade do projeto é crucial.
Classes seladas podem ter métodos que também são selados?
Sim, classes seladas podem conter métodos que também são selados. Isso significa que esses métodos não podem ser sobrescritos em classes derivadas, aumentando ainda mais a segurança e a consistência da funcionalidade da classe.
Qual a vantagem de usar métodos selados em uma classe?
Métodos selados impedem a sobrescrita por classes derivadas, o que ajuda a manter o comportamento original do método, garantindo consistência e protegendo contra modificações não intencionais.
Você pode fornecer exemplos de quando usar classes seladas?
Classes seladas são úteis quando você deseja restringir a implementação de uma classe para evitar alterações por meio de herança, como em classes utilitárias ou ao trabalhar com operações sensíveis onde a estabilidade é necessária.
Como as classes seladas se relacionam com a geração de PDFs em C#?
Ao usar uma biblioteca de PDF como o IronPDF, as classes seladas podem ser aproveitadas para garantir que os processos de geração de PDF permaneçam consistentes e seguros, impedindo modificações por meio de herança.
É possível usar classes seladas com bibliotecas de terceiros como o IronPDF?
Sim, classes seladas podem ser usadas em conjunto com bibliotecas de terceiros, como o IronPDF, para encapsular a lógica de geração de PDFs dentro de uma estrutura de classes segura e não herdável.
Como posso instalar uma biblioteca PDF em C# usando o NuGet?
Você pode instalar uma biblioteca C# para PDF, como o IronPDF, através do Gerenciador de Pacotes NuGet, usando o comando dotnet add package IronPDF ou pesquisando por 'ironpdf' no Gerenciador de Pacotes NuGet do Visual Studio.
Quais são as considerações para o uso de classes seladas no projeto de software?
Os desenvolvedores devem considerar a necessidade de extensibilidade futura e documentar os motivos para o uso de classes seladas. O uso de classes seladas pode aumentar a segurança e a facilidade de manutenção, mas deve ser equilibrado com a flexibilidade exigida pela aplicação.
Qual é o gerador de PDF recomendado para desenvolvedores C#?
IronPDF é um gerador de PDF recomendado para desenvolvedores C#, oferecendo recursos robustos de criação e manipulação de PDFs como um pacote NuGet.




