2009-07-09 13 views
6

Entiendo que anular un método/función redefine su implementación en la clase derivada desde su implementación en la clase base.¿Debo llamar a la implementación de la clase base al anular un método en C# para ASP.NET?

Ahora lo que me confunde, es si puedo reemplazar una clase en ASP.NET como CreateChildControls() (lo escogí al azar sin ninguna razón en particular), VS2008 automático genera:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

suficientemente bueno, la implementación por defecto simplemente llama a la clase base 'CreateChildControls().

Así que si quiero correr un cierto código, ya que no sé cómo base.CreateChildControls(), debo hacer esto:

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

o, ignorar lo base.CreateChildControls() por completo y sólo lo hacen

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

Respuesta

11

Eso es Depende de usted. En general, quieres llamar al método de la clase base porque puede hacer muchas cosas que no conoces (especialmente en una clase que no controlas ... ¿entiendes? Control). Pero, si tienes mucha confianza, no necesita (o quiere) que ocurra la "clase de cosas" de la clase base, puede eliminar la llamada.

+0

Es realmente sorprendente para mí que se te permita anular una clase base que no tienes. – Matt

+7

Tengo que tener esa libertad. El hecho de que sea su hijo no significa que quiera hacer todo lo que usted hace. A veces, necesito salir al mundo y hacer las cosas a mi manera. Serías un padre sobreprotector si me obligaste a tener tu implementación. :) –

+0

Comenzando por el hecho de que estoy invocando la clase base cuando anulo en mi 'Control' personalizado, con respecto a las anulaciones' OnXxxx' generalmente obtengo que llamo 'base.OnXxxx' al final de mi método derivado. ¿Existe alguna regla general sobre si llamar a 'base.CreateChildControls' al comienzo o al final del método derivado? – superjos

3

Se trata simplemente de si desea reemplazar por completo el comportamiento o agregar un comportamiento.

Para algo así como CreateChildControls, probablemente retendrá la llamada a la clase base.

1

depende de lo que quieras hacer. Si desea llamar al método base.CreateChildControls() y luego desea realizar alguna acción personalizada antes o después de que se llame al método, puede hacerlo.

Si desea tener un control total de lo que sucede cuando se llama a CreateChildControls, simplemente puede ignorar llamarlo por completo.

El hecho de que esté ahí por defecto es solo un poco de orientación para usted.

0

Depende si quiere reemplazar o completa aplicación la base ... en la mayoría de los casos debe llamar a la implementación base (y que sin duda debe hacerlo en el caso del método de CreateChildItems ...)

0

Es posible que desee echar un vistazo al patrón template method. Si bien no se puede hacer nada sobre la forma en que se implementan las clases de la biblioteca, podría ayudarlo a asegurarse de que el código que escribe sea fácil de usar correctamente.

Cuestiones relacionadas