tag - Método sellado en C#
summary tag in c# (6)
Ahora, si declara una subclase de Programa, no podrá anular el método de Prueba, ese es el punto.
En la mayoría de los casos, no necesitará métodos sellados, pero pueden resultar útiles cuando se está desarrollando una clase base para algún sistema de complementos que los desarrolladores de terceros tienen que ampliar para crear su propio complemento. Puede mantener algunos datos de servicio como el nombre del complemento y si está habilitado y usar métodos y propiedades sellados para hacerlo, de modo que los desarrolladores de complementos no se metan con él. Ese es un caso cuando los miembros sellados son útiles
Soy un novato en C #. Estoy leyendo sobre la palabra clave sellada. Tengo información sobre la clase sellada. He leído una línea sobre el método sellado donde también podemos hacer el método sellado. La línea fue ( al declarar el método como sellado, podemos evitarlo). anulación adicional de este método. ) He creado una demostración pero no entendí que el significado de la línea anterior y el método sellado se usan. Abajo está mi código:
using System;
namespace ConsoleApplication2
{
class Program:MyClass
{
public override sealed void Test()
{
Console.WriteLine("My class Program");
}
static void Main(string[] args)
{
Program obj = new Program();
obj.Test();
Console.ReadLine();
}
}
class MyClass
{
public virtual void Test()
{
Console.WriteLine("My class Test");
}
}
}
Dígame por qué usamos los métodos sellados y cuáles son las ventajas de los métodos sellados.
Bueno, estás probando solo con dos niveles de herencia, y no estás llegando al punto de que estás "más allá" del método. Si lo haces tres, puedes ver lo que hace sealed
:
class Base {
public virtual void Test() { ... }
}
class Subclass1 : Base {
public sealed override void Test() { ... }
}
class Subclass2 : Subclass1 {
public override void Test() { ... } // Does not compile!
// If `Subclass1.Test` was not sealed, it would''ve compiled correctly.
}
Bueno, solo usarías "sellado" en un método si no quisieras que ninguna clase derivada anule más tu método. Los métodos están sellados de forma predeterminada, si no se declaran como virtuales y no anulan otro método virtual. (En Java, los métodos son virtuales de forma predeterminada: para lograr el comportamiento "predeterminado" de C #, debe marcar un método como final
).
Personalmente, me gusta controlar la herencia con cuidado, prefiero sellar clases enteras siempre que sea posible. Sin embargo, en algunos casos aún desea permitir la herencia, pero asegúrese de que algunos métodos no se anulen más. Un uso podría ser la creación efectiva de plantillas en el método , por ejemplo, para diagnósticos:
public sealed override void Foo(int x)
{
Log("Foo called with argument: {0}", x);
FooImpl(x);
Log("Foo completed");
}
protected abstract void FooImpl(int x);
Ahora las subclases no pueden anular Foo
directamente; tendrían que anular FooImpl
, por lo que nuestro comportamiento siempre se ejecutará cuando otro código llame a Foo
.
Las plantillas podrían ser, por supuesto, por otras razones, por ejemplo, para imponer ciertos aspectos de la validación de argumentos.
En mi experiencia, los métodos sellados no se usan muy a menudo, pero me alegra que la habilidad esté ahí. (Solo deseo que las clases estén selladas de forma predeterminada, pero esa es otra conversación).
C # lo tiene porque Java tiene una característica idéntica (métodos final
). Nunca he visto un uso legítimo.
Si no desea permitir la extensión, toda la clase debe marcarse como sealed
y no solo un método.
Una clase sellada es una clase que no puede ser una clase base de otra clase más derivada.
Un método sellado en una clase sin sellar es un método que no se puede anular en una clase derivada de esta clase.
¿Por qué usamos métodos sellados? ¿Cuáles son las ventajas de los métodos sellados?
Bueno, ¿por qué usas métodos virtuales? Para proporcionar un punto en el que el comportamiento de una clase puede ser personalizado . Entonces, ¿por qué usas métodos sellados? Para proporcionar un punto en el que se garantiza que no se producirán más cambios en el comportamiento de ninguna clase derivada con respecto a este método .
Los puntos en los que se puede personalizar el comportamiento de una clase son útiles pero peligrosos . Son útiles porque permiten que las clases derivadas cambien el comportamiento de la clase base. Son peligrosos ... espérenlo ... porque permiten que las clases derivadas cambien el comportamiento de la clase base . Los métodos virtuales básicamente permiten que terceros hagan que sus clases hagan locuras que nunca anticipó ni probó.
Me gusta escribir código que haga lo que anticipo y lo que probé. Sellar un método le permite continuar permitiendo que partes de la clase se sobrescriban mientras que los métodos sellados tienen un comportamiento garantizado, comprobable y estable que no se puede personalizar aún más.
Métodos sellados
El método sellado se utiliza para definir el nivel de reemplazo de un método virtual.
La palabra clave sellada siempre se utiliza con la palabra clave de anulación.
Demostración práctica del método sellado.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace sealed_method
{
class Program
{
public class BaseClass
{
public virtual void Display()
{
Console.WriteLine("Virtual method");
}
}
public class DerivedClass : BaseClass
{
// Now the display method have been sealed and can;t be overridden
public override sealed void Display()
{
Console.WriteLine("Sealed method");
}
}
//public class ThirdClass : DerivedClass
//{
// public override void Display()
// {
// Console.WriteLine("Here we try again to override display method which is not possible and will give error");
// }
//}
static void Main(string[] args)
{
DerivedClass ob1 = new DerivedClass();
ob1.Display();
Console.ReadLine();
}
}
}