
C# Clase Sellada (Cómo Funciona para Desarrolladores)
En el mundo de la programación orientada a objetos, el lenguaje C# proporciona a los desarrolladores un conjunto versátil de herramientas para diseñar e implementar software robusto. Una de estas características que agrega una capa extra de control a la herencia de clases es el concepto de una clase sellada. Las clases selladas ofrecen una manera única de restringir la jerarquía de herencia, proporcionando un nivel de seguridad y encapsulación que puede ser beneficioso en ciertos escenarios. En este artículo, profundizaremos en las complejidades de las clases selladas de C# y también exploraremos el paquete IronPDF de NuGet de Iron Software.
¿Qué son las clases selladas y los métodos sellados?
Clase Sellada: En C#, una clase sellada es una clase que no puede ser heredada. Al usar la palabra clave sealed, los desarrolladores pueden evitar que otras clases deriven o extiendan desde la clase sellada. Esta restricción deliberada asegura que la clase sellada no pueda ser usada como clase base para ninguna otra clase, limitando el alcance de la jerarquía de herencia. Las clases selladas se emplean a menudo cuando un desarrollador quiere controlar y finalizar la estructura de una clase, evitando modificaciones no deseadas a través de la herencia.
Considera el siguiente ejemplo:
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'
' {
' }A diferencia de las estructuras, que están implícitamente selladas, la clase sellada debe ser declarada usando la palabra clave sealed como se muestra arriba. En este ejemplo, la clase Animal se declara como sellada, lo que hace imposible que cualquier otra clase herede de ella.
Método Sellado: Además de sellar clases enteras, C# también permite a los desarrolladores sellar métodos individuales dentro de una clase. Un método sellado es un método que cualquier clase derivada no puede sobrescribir. Esto asegura que el comportamiento del método permanezca consistente en todas las subclases, proporcionando un nivel de previsibilidad en la lógica de la aplicación.
Para sellar un método, use el 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 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 ClassLa palabra clave virtual permite que el método sea sobrescrito en clases derivadas, mientras que la palabra clave sealed impide seguir sobrescribiendo el método virtual de la clase base en cualquier subclase subsiguiente.
Clase Sellada y Miembros de Clase: Las clases selladas también pueden incluir miembros sellados, como propiedades, métodos y eventos. Esta combinación de clase sellada y miembros sellados asegura un alto grado de control sobre el comportamiento y la estructura de la clase.
Considera el siguiente ejemplo:
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 ClassEn este ejemplo, cada aspecto del ControlledClass está sellado: la propiedad, el método, el evento e incluso un indexador si aplica. Este nivel de sellado proporciona una estructura robusta e inalterable, ideal para escenarios donde el diseño de la clase debe permanecer fijo.
La razón de ser de Sealed Class
Seguridad del Código: Las clases selladas contribuyen a la seguridad del código al prevenir el acceso y modificación no autorizados. Cuando una clase es sellada, sirve como una entidad cerrada con una interfaz y comportamiento bien definidos. Esta encapsulación minimiza el riesgo de efectos secundarios no deseados o alteraciones que podrían comprometer la estabilidad y seguridad de la base de código.
Integridad del Diseño: En bases de código o marcos de trabajo más grandes, mantener la integridad del diseño es primordial. Una clase sellada actúa como un bloque de construcción fundamental con estructuras fijas, reduciendo las posibilidades de modificaciones no deseadas. Esto es particularmente beneficioso en escenarios donde una clase sirve como un componente central de un sistema, y su comportamiento debe permanecer consistente a través de diferentes módulos.
Prácticas recomendadas para el uso de Sealed Class
- Usa la Clase Sellada con Moderación: Aunque la clase sellada ofrece beneficios, deben emplearse con juicio. El uso excesivo de clases selladas puede conducir a un código rígido y menos mantenible.
- Documenta la Intención: Al sellar una clase o método, es crucial documentar el propósito detrás de esta decisión. Explica por qué una clase específica está sellada y qué consideraciones de diseño llevaron a esa elección.
- Considera la Extensibilidad Futura: Antes de sellar una clase, considera si los requisitos futuros podrían necesitar extensibilidad. Si existe la posibilidad de que una clase necesite ser extendida, sellarla podría obstaculizar el desarrollo futuro.
- Usa Métodos Sellados para la Estabilidad: Sellar métodos puede ser beneficioso cuando el comportamiento central de un método debe permanecer estable a través de diferentes subclases. Esto puede mejorar la previsibilidad del código.
- No Puede Ser También Abstracto: Una clase sellada/métodos sellados no pueden ser también una clase abstracta/métodos abstractos, ya que las clases abstractas están diseñadas para ser heredadas por otras clases mientras que las clases selladas restringen la herencia.
Presentando IronPDF

IronPDF es una biblioteca de PDF para C# de Iron Software y es un generador y lector de PDF moderno.
Instalación
IronPDF se puede instalar usando la consola del Administrador de Paquetes de NuGet o usando el administrador de paquetes de Visual Studio. A continuación se muestra el comando para la consola:
O, para instalar IronPDF usando NuGet Package Manager, busque "IronPDF" en la barra de búsqueda de NuGet Package Manager.

IronPDF y las clases selladas
Juntos, la palabra clave sellada y IronPDF se pueden usar para prevenir que una librería subclase o una librería derivada sobrescriba miembros heredados y también genere 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
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 As 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
PDF generado con IronPDF

Licencia (Prueba gratuita disponible)
IronPDF. Esta clave debe colocarse en appsettings.json.
{
"IronPdf.LicenseKey": "your license key"
}
Proporcione su correo para una licencia de prueba.
Conclusión
Las clases selladas en C# ofrecen a los desarrolladores un mecanismo poderoso para controlar la jerarquía de herencia y asegurar que ciertas clases y sus miembros no puedan ser extendidos o sobrescritos. Si bien el uso de clases selladas debe ser considerado cuidadosamente, proporcionan un medio efectivo para encapsular funcionalidad y prevenir modificaciones no deseadas. Al entender el concepto de clases y métodos sellados, los desarrolladores pueden tomar decisiones informadas sobre cuándo y dónde aplicar esta restricción, contribuyendo a crear sistemas de software mantenibles, seguros y previsibles. Junto con IronPDF, también podemos imprimir documentos PDF.

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.
Artículos Relacionados


