c# - method - ¿Puedo evitar que un método virtual heredado se anule en subclases?
override a method c# (6)
En B, haz
protected override sealed void Render() { ... }
Tengo algunas clases presentadas así
class A
{
public virtual void Render()
{
}
}
class B : A
{
public override void Render()
{
// Prepare the object for rendering
SpecialRender();
// Do some cleanup
}
protected virtual void SpecialRender()
{
}
}
class C : B
{
protected override void SpecialRender()
{
// Do some cool stuff
}
}
¿Es posible evitar que la clase C anule el método Render, sin romper el siguiente código?
A obj = new C();
obj.Render(); // calls B.Render -> c.SpecialRender
Otra forma (¿mejor?) Es probablemente usar la nueva palabra clave para evitar que un método virtual en particular sea supervisado:
class A
{
public virtual void Render()
{
}
}
class B : A
{
public override void Render()
{
// Prepare the object for rendering
SpecialRender();
// Do some cleanup
}
protected virtual void SpecialRender()
{
}
}
class B2 : B
{
public new void Render()
{
}
}
class C : B2
{
protected override void SpecialRender()
{
}
//public override void Render() // compiler error
//{
//}
}
Puede sellar métodos individuales para evitar que sean invalidables:
public sealed override void Render()
{
// Prepare the object for rendering
SpecialRender();
// Do some cleanup
}
Sí, puede usar la palabra clave sellada en la implementación de la clase B de Render:
class B : A
{
public sealed override void Render()
{
// Prepare the object for rendering
SpecialRender();
// Do some cleanup
}
protected virtual void SpecialRender()
{
}
}
prueba sealed
class B : A
{
protected sealed override void SpecialRender()
{
// do stuff
}
}
class C : B
protected override void SpecialRender()
{
// not valid
}
}
Por supuesto, creo que C puede evitarlo siendo new
.
sí. Si marca un método como Sellado, no puede ser anulado en una clase derivada.