2011-09-24 9 views
6

Tengo una clase base que deseo proporcionar cierta funcionalidad 'base' para los métodos para todas las clases heredadas.¿Diferencia entre nueva y sobrescritura?

En mis clases Herencia de que quiero hacer:

public override void Setup() 
{ 
    base.Setup(); 
} 

Pero en el momento que dice que tengo que utilizar la nueva palabra clave.

¿Cómo lo tengo así que tengo que usar la palabra clave override?

¿Hay alguna diferencia entre cómo me está usando la palabra clave new y usando override?

+3

http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier

+1

posible duplicado de [C# keyword use virtual + override vs. new] (http: // stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier

+0

gracias que fue un gran enlace – Blankman

Respuesta

7

Lo dice porque no ha declarado el método base virtual. Una vez que lo haga, la base virtual/derivado override par de palabras clave tendrá sentido. En este momento, el compilador se queja de que no puede override un método que no es virtual.

+3

... y solo se pueden anular los métodos 'virtuales'. –

4

Cuando utiliza la palabra clave override, el método derivado se usa incluso cuando la instancia se pasa como un tipo de clase Base. Por lo tanto, es necesario que haya un virtual en la clase base para que el programa sepa que tiene que hacer una verificación en tiempo de ejecución de cuál es el tipo real de la instancia. Luego busca cuál es el tipo real y, si es un tipo derivado, verifica si es una anulación en la clase derivada para ese método particular en la clase base.

La ocultación de miembros es diferente. El miembro base solo se ocultará si se pasa realmente como una instancia de la clase derivada. Si el objeto se pasa como una clase base, el método de la clase base seguirá siendo utilizado. Si oculta un miembro, recibirá una advertencia si no ha utilizado la nueva palabra clave. La nueva palabra clave es simplemente para decirle al compilador que realmente quiere ocultar el método de tipo base.