AYUDA .NET

C# Sealed Class (Cómo funciona para los desarrolladores)

Actualizado 18 de febrero, 2024
Compartir:

En el mundo de la programación orientada a objetos, el lenguaje C# proporciona a los desarrolladores un versátil conjunto de herramientas para diseñar e implantar software robusto. Una de estas características que añade una capa adicional de control a la herencia de clases es el concepto de clase sellada. Las clases selladas ofrecen una forma ú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, nos adentraremos en los entresijos de las clases selladas de C#, y también exploraremos la función IronPDF Paquete 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. Utilizando la palabra clave sealed, los desarrolladores pueden evitar que otras clases deriven o extiendan de la clase sellada. Esta restricción deliberada garantiza que la clase sellada no pueda utilizarse como clase base para ninguna otra clase, limitando el alcance de la jerarquía de herencia. Las clases selladas suelen emplearse cuando un desarrollador desea controlar y finalizar la estructura de una clase, evitando modificaciones no intencionadas a través de la herencia.

Considere el siguiente ejemplo:

public sealed class Animal
{
    public string Species { get; set; }
    public void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}
public class Dog : Animal //  Error: No se puede heredar 
{
}
public sealed class Animal
{
    public string Species { get; set; }
    public void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}
public class Dog : Animal //  Error: No se puede heredar 
{
}
Public NotInheritable Class Animal
	Public Property Species() As String
	Public Sub MakeSound()
		Console.WriteLine("Generic animal sound")
	End Sub
End Class
Public Class Dog '  Error: No se puede heredar
	Inherits Animal

End Class
VB   C#

A diferencia de los structs que están sellados implícitamente, la clase sellada tiene que ser declarada usando la palabra clave sealed como se muestra arriba. En este ejemplo, la Clase Animal se declara como sellada, haciendo 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 ninguna clase derivada puede sobrescribir. Esto garantiza que el comportamiento del método se mantenga consistente en todas las subclases, proporcionando un nivel de previsibilidad en la lógica de la aplicación.

Para sellar un método, utilice el modificador sellado:

public class Animal
{
    public string Species { get; set; }
    public virtual void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}
public class Dog : Animal
{
    public sealed override void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}
public class Animal
{
    public string Species { get; set; }
    public virtual void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}
public class Dog : Animal
{
    public sealed override void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
}
Public Class Animal
	Public Property Species() As String
	Public Overridable Sub MakeSound()
		Console.WriteLine("Generic animal sound")
	End Sub
End Class
Public Class Dog
	Inherits Animal

	Public NotOverridable Overrides Sub MakeSound()
		Console.WriteLine("Generic animal sound")
	End Sub
End Class
VB   C#

La palabra clave virtual permite que el método sea sobrescrito en clases derivadas, mientras que la palabra clave sellada impide que se sobrescriba el método virtual de la clase base en cualquier subclase posterior.

Clase sellada y miembros de la 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 garantiza un alto grado de control sobre el comportamiento y la estructura de la clase.

Considere el siguiente ejemplo:

public sealed class ControlledClass
{
    public sealed string ControlledProperty { get; set; }
    public virtual sealed void ControlledMethod()
    {
        //  Aplicación del método
    }
    //  Evento sellado
    public sealed event EventHandler ControlledEvent;
    //  Indexadores sellados, si procede
    public sealed string this [int index]
    {
        get { return "Value"; }
        set { /* Setter implementation */ }
    }
}
public sealed class ControlledClass
{
    public sealed string ControlledProperty { get; set; }
    public virtual sealed void ControlledMethod()
    {
        //  Aplicación del método
    }
    //  Evento sellado
    public sealed event EventHandler ControlledEvent;
    //  Indexadores sellados, si procede
    public sealed string this [int index]
    {
        get { return "Value"; }
        set { /* Setter implementation */ }
    }
}
Public NotInheritable Class ControlledClass
	Public NotOverridable Property ControlledProperty() As String
	Public Overridable NotOverridable Sub ControlledMethod()
		'  Aplicación del método
	End Sub
	'  Evento sellado
	Public Event ControlledEvent As EventHandler
	'  Indexadores sellados, si procede
	Default Public NotOverridable Property Item(ByVal index As Integer) As String
		Get
			Return "Value"
		End Get
		Set(ByVal value As String)
		End Set
	End Property
End Class
VB   C#

En este ejemplo, cada aspecto de la ControlledClass está sellado - la propiedad, el método, el evento, e incluso un indexador si es aplicable. Este nivel de sellado proporciona una estructura robusta e inalterable, ideal para escenarios en los que el diseño de la clase debe permanecer fijo.

La razón de ser de la clase sellada

Seguridad del código: Las clases selladas contribuyen a la seguridad del código impidiendo el acceso y la modificación no autorizados. Cuando una clase está sellada, sirve como una entidad cerrada con una interfaz y un comportamiento bien definidos. Esta encapsulación minimiza el riesgo de efectos secundarios no deseados o alteraciones que podrían comprometer la estabilidad y seguridad del código base.

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 fundacional con estructuras fijas, reduciendo las posibilidades de modificaciones no intencionadas. Esto resulta especialmente beneficioso en situaciones en las que una clase es el componente central de un sistema y su comportamiento debe ser coherente en los distintos módulos.

Mejores prácticas para utilizar la clase sellada

  1. Utilizar la clase sellada con moderación: Aunque la clase sellada ofrece ventajas, deben emplearse con criterio. El uso excesivo de clases selladas puede dar lugar a un código rígido y menos fácil de mantener.
  2. Documentar la intención: Cuando se sella una clase o método, es crucial documentar la intención detrás de esta decisión. Explique por qué se sella una clase determinada y qué consideraciones de diseño llevaron a esa elección.
  3. Considere la extensibilidad futura: Antes de sellar una clase, considere si los requisitos futuros pueden requerir extensibilidad. Si existe la posibilidad de que una clase deba ampliarse, su sellado puede obstaculizar el desarrollo futuro.
  4. Utilizar métodos sellados para la estabilidad: Los métodos sellados pueden ser beneficiosos 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.
  5. No puede ser también abstracto: Una clase sellada/métodos sellados no puede 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.

Presentación de IronPDF

Clase sellada en C# (Cómo funciona para los desarrolladores): Figura 1 - Página web de IronPDF

IronPDF es una biblioteca PDF en C# de Iron Software y es un moderno generador y lector de PDF.

Instalación

IronPDF puede instalarse mediante la aplicación NuGet Package Manager o utilizando el gestor de paquetes de Visual Studio. A continuación se muestra el comando para la consola:

dotnet add package IronPdf

O bien, para instalar IronPDF mediante NuGet Package Manager, busque "ironpdf" en la barra de búsqueda de NuGet Package Manager.

Clase sellada en C# (Cómo funciona para los desarrolladores): Figura 2 - Instalación de la biblioteca IronPDF a través del gestor de paquetes NuGet

IronPDF y las clases selladas

Juntas, la palabra clave sealed y IronPDF pueden utilizarse para evitar que una biblioteca de una subclase o una biblioteca 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();
    }
}
//  Clase base sellada
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
{
    public sealed override void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
    public sealed override void Print()
    {
        var pdfDocument = 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>";
        pdfDocument.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();
    }
}
//  Clase base sellada
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
{
    public sealed override void MakeSound()
    {
        Console.WriteLine("Generic animal sound");
    }
    public sealed override void Print()
    {
        var pdfDocument = 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>";
        pdfDocument.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
	'  Clase base sellada
	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

		Public NotOverridable Overrides Sub MakeSound()
			Console.WriteLine("Generic animal sound")
		End Sub
		Public NotOverridable Overrides Sub Print()
			Dim pdfDocument = 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>"
	ignore ignore ignore ignore ignore ignore ignore ignore pdfDocument.RenderHtmlAsPdf(content).SaveAs("dog.pdf")
		End Sub
	End Class
End Namespace
VB   C#

Clase sellada en C# (Cómo funciona para desarrolladores): Figura 3 - Salida de la consola, mostrando el comando de ejecución y los mensajes de consola resultantes

A continuación se muestra el PDF generado a partir de IronPDF

Clase sellada en C# (Cómo funciona para los desarrolladores): Figura 4 - PDF de salida generado con el ejemplo de código anterior

Licencias (prueba gratuita disponible)

IronPDF. Esta clave debe colocarse en appsettings.json.

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
VB   C#

Proporcione su correo electrónico para obtener una licencia de prueba.

Conclusión

Las clases selladas de C# ofrecen a los desarrolladores un potente mecanismo para controlar la jerarquía de herencia y garantizar que determinadas clases y sus miembros no puedan extenderse ni sobrescribirse. Aunque el uso de clases selladas debe considerarse cuidadosamente, proporcionan un medio eficaz para encapsular la funcionalidad y evitar modificaciones no intencionadas. Al comprender 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 predecibles. Junto con IronPDF, también podemos imprimir documentos PDF.

< ANTERIOR
Cola de prioridades en C# (Cómo funciona para desarrolladores)
SIGUIENTE >
Sintaxis de consulta C# LINQ Join (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123