polimorfismo method interfaces inherited how c# polymorphism

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.