C# | Clase sellada

Las clases selladas se utilizan para impedir que los usuarios hereden la clase. Una clase se puede sellar usando la palabra clave sellada . La palabra clave le dice al compilador que la clase está sellada y, por lo tanto, no se puede extender. Ninguna clase puede derivarse de una clase sellada.

La siguiente es la sintaxis de una clase sellada: 

sealed class class_name
{
    // data members
    // methods
    .
    .
    .

}

Un método también se puede sellar y, en ese caso, el método no se puede anular. Sin embargo, un método puede estar sellado en las clases en las que ha sido heredado. Si desea declarar un método como sellado, debe declararse como virtual en su clase base.

La siguiente definición de clase define una clase sellada en C#:

En el siguiente código, cree una clase sellada SealedClass y utilícela desde Program. Si ejecuta este código, funcionará bien.  

C#

// C# code to define
// a Sealed Class
using System;
 
// Sealed class
sealed class SealedClass {
 
    // Calling Function
    public int Add(int a, int b)
    {
        return a + b;
    }
}
 
class Program {
 
    // Main Method
    static void Main(string[] args)
    {
 
        // Creating an object of Sealed Class
        SealedClass slc = new SealedClass();
 
        // Performing Addition operation
        int total = slc.Add(6, 4);
        Console.WriteLine("Total = " + total.ToString());
    }
}

Producción : 

Total = 10

Ahora, si intenta heredar una clase de una clase sellada, se producirá un error que indica que «No se puede derivar de una clase Sealed «.

C#

// C# code to show restrictions
// of a Sealed Class
using System;
 
class Bird {
 
}
 
// Creating a sealed class
sealed class Test : Bird {
}
 
// Inheriting the Sealed Class
class Example : Test {
}
 
// Driver Class
class Program {
 
    // Main Method
    static void Main()
    {
    }
}

Error:

Error CS0509 ‘Ejemplo’: no ​​se puede derivar del tipo sellado ‘Prueba’

Considere el siguiente ejemplo de un método sellado en una clase derivada: 

C#

// C# program to
// define Sealed Class
using System;
 
class Printer {
 
    // Display Function for
    // Dimension printing
    public virtual void show()
    {
        Console.WriteLine("display dimension : 6*6");
    }
 
    // Display Function
    public virtual void print()
    {
        Console.WriteLine("printer printing....\n");
    }
}
 
// inheriting class
class LaserJet : Printer {
 
    // Sealed Display Function
    // for Dimension printing
    sealed override public void show()
    {
        Console.WriteLine("display dimension : 12*12");
    }
 
    // Function to override
    // Print() function
    override public void print()
    {
        Console.WriteLine("Laserjet printer printing....\n");
    }
}
 
// Officejet class cannot override show
// function as it is sealed in LaserJet class.
class Officejet : LaserJet {
 
    // can not override show function or else
    // compiler error : 'Officejet.show()' :
    // cannot override inherited member
    // 'LaserJet.show()' because it is sealed.
    override public void print()
    {
        Console.WriteLine("Officejet printer printing....");
    }
}
 
// Driver Class
class Program {
 
    // Driver Code
    static void Main(string[] args)
    {
        Printer p = new Printer();
        p.show();
        p.print();
 
        Printer ls = new LaserJet();
        ls.show();
        ls.print();
 
        Printer of = new Officejet();
        of.show();
        of.print();
    }
}

Producción : 

display dimension : 6*6
Printer printing....

display dimension : 12*12
LaserJet printer printing....

display dimension : 12*12
Officejet printer printing....

Explicación: en el código de C# anterior, la clase de impresora tiene una unidad de visualización con una dimensión de 6*6 y la clase LaserJet ha implementado el método show anulándolo para que tenga una dimensión de 12*12. Si alguna clase heredará la clase LaserJet, tendrá la misma dimensión de 12*12 y no podrá implementar la suya propia, es decir, no podrá tener 15*15, 16*16 ni ninguna otra dimensión. Por lo tanto, la llamada LaserJet sellará el método show para evitar que se anule más.

¿Por qué clases selladas? 

  • La clase sellada se usa para evitar que una clase se herede. No puede derivar ni extender ninguna clase de él.
  • El método sellado se implementa para que ninguna otra clase pueda derrocarlo e implementar su propio método.
  • El objetivo principal de la clase sellada es retirar el atributo de herencia del usuario para que no pueda obtener una clase de una clase sellada. Las clases selladas se usan mejor cuando tiene una clase con miembros estáticos. 
    por ejemplo , las clases «Plumas» y «Pinceles» del espacio de nombres System.Drawing. La clase Bolígrafos representa los bolígrafos para colores estándar. Esta clase solo tiene miembros estáticos. Por ejemplo, “Pens.Red” representa un bolígrafo de color rojo. De manera similar, la clase «Pinceles» representa pinceles estándar. “Brushes.Red” representa un pincel con color rojo.

Publicación traducida automáticamente

Artículo escrito por Akanksha_Rai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *