2011-03-11 28 views

Respuesta

27

también puede usar el modificador sellado para evitar que una clase derivada anule aún más el método.

mira esto: Sealed methods

+4

incorrecto. La palabra clave 'sealed' solo se puede utilizar en un método reemplazado para evitar nuevas anulaciones; eso no es lo que está pidiendo. – SLaks

+7

Hmm, la pregunta no tiene ningún sentido a menos que el OP esté hablando de un método virtual. Intentemos dar respuestas sensatas a preguntas sensatas. Esta respuesta es sensata. –

+0

SLaks: el modificador sellado es perfectamente aceptable.Es solo una cuestión de estructurar la herencia ... – code4life

33

Sólo virtual métodos se pueden anular.
Simplemente omita virtual, y su método no será reemplazable.

10

Sí. La palabra clave sealed también se puede usar en métodos, para indicar que un método que es virtual o abstracto a niveles de herencia más altos no puede ser heredado.

Si el método nunca fue virtual o abstracto para empezar, no se preocupe; no puede ser anulado

Tenga en cuenta que sealed solo afecta al método anulado; método ocultándose no se puede detener de esta manera, por lo que una clase secundaria todavía puede declarar un método new con el mismo nombre y firma que su método sellado.

1

Sí. debe utilizar anulación sellada para conocer el método para lograrlo.

5

Usted puede utilizar la palabra clave sealed de dos maneras:

  1. Antes de una clase para evitar la herencia.
  2. Antes de una función para evitar la anulación.

Para permitir que la herencia no poner la palabra clave sealed antes de la clase y para evitar primordial poner sealed antes de la función que usted no desea ser anulado.

+0

nice answer. Considere usar el formato para la lista numerada y tal. Ver http://stackoverflow.com/editing-help – vidstige

+0

@vidstige Ok gracias amigo. – Bardia

9

que pueda obtener el sealed palabra clave para trabajar en un método en la clase abstracta, haciendo que la propia clase abstracta deriva de algo:

abstract class DocumentTemplateBase 
{ 
    public abstract void WriteTitle(); 
    public abstract void WriteSections(); 
} 

abstract class DocumentTemplate : DocumentTemplateBase 
{ 
    public override sealed void WriteTitle() 
    { 
     Console.WriteLine("Project document"); 
    } 

    public override sealed void WriteSections() 
    { 
     Console.WriteLine("Sections"); 
    } 

    abstract public void WriteContent(); 
} 

Aún derivando su clase concreta de la original (y ahora derivados) abstracta clase:

class Document1_FromTemplate : DocumentTemplate 
{ 
    public override void WriteTitle() //error! 
    { 
     Console.WriteLine("Project1 document"); 
    } 

"no puede anular miembro heredado 'Dynamics.DocumentTemplate.WriteTitle()' porque se sella"

No hay nada, sin embargo, para evitar un implementador de new ing que:

class Document1_FromTemplate : DocumentTemplate 
{ 
    public new void WriteTitle() //sorry! can't stop it! 
    { 
     Console.WriteLine("Project1 document"); 
    } 
Cuestiones relacionadas