Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
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ónIronPDF Paquete NuGet deIron Software.
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: Cannot be inherited
{
}
public sealed class Animal
{
public string Species { get; set; }
public void MakeSound()
{
Console.WriteLine("Generic animal sound");
}
}
public class Dog : Animal // Error: Cannot be inherited
{
}
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: Cannot be inherited
Inherits Animal
End Class
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
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()
{
// Method implementation
}
// Sealed event
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
{
public sealed string ControlledProperty { get; set; }
public virtual sealed void ControlledMethod()
{
// Method implementation
}
// Sealed event
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
Public NotOverridable Property ControlledProperty() As String
Public Overridable NotOverridable Sub ControlledMethod()
' Method implementation
End Sub
' Sealed event
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)
End Set
End Property
End Class
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.
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.
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.
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.
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.
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.
clases selladas
restringen la herencia.IronPDF es una biblioteca PDF en C# deIron Software y es un moderno generador y lector de PDF.
IronPDF puede instalarse mediante la aplicaciónNuGet 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.
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();
}
}
// Sealed 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
{
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();
}
}
// Sealed 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
{
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
' Sealed 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
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
A continuación se muestra el PDF generado a partir de IronPDF
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"
Proporcione su correo electrónico para obtener una licencia de prueba.
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.
9 productos API .NET para sus documentos de oficina